Filter 设计模式编码实践

栏目: 后端 · 发布时间: 6年前

内容简介:最近项目中遇到各种输出数据监控,数据校验等逻辑,一个个实现很是麻烦。项目是中途接手的,不是很熟悉,偶然一天发现项目中对 Filter 的使用扩展起来很是方便,所以,今天楼主来分享下,也为自己学习做个记录。下面我们从三方面来阐述。Filter 在设计模式里面被称为责任链设计模式,顾名思义,我们可以在这条责任链上对一组数据做不同的处理。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。定义 Filter 接口,接口中定义进行数据处理的方法。

最近项目中遇到各种输出数据监控,数据校验等逻辑,一个个实现很是麻烦。项目是中途接手的,不是很熟悉,偶然一天发现项目中对 Filter 的使用扩展起来很是方便,所以,今天楼主来分享下,也为自己学习做个记录。下面我们从三方面来阐述。

什么是 Filter

Filter 在 设计模式 里面被称为责任链设计模式,顾名思义,我们可以在这条责任链上对一组数据做不同的处理。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。

怎么用 Filter 项目中的代码实现逻辑

定义 Filter 接口,接口中定义进行数据处理的方法。

public interface IDataHandlerFilter {

	void filter(DataPackage dataPackage);
}

统一数据发送端,将业务系统处理好的数据,统一发送到 kafka。当然我们还可以实现 Filter 对数据进行其他处理。

public class DataSendHandlerFilter implements IDataHandlerFilter {

	public static final Logger log = LogManager.getLogger(DataSendHandlerFilter.class);

	private int logCenterType;

	//数据源类型 0-实时数据 1-wifi数据
	private String resourceType = StringUtils.isBlank(Repository.getCityConfig().getResourceType()) ? "0" : Repository.getCityConfig().getResourceType();

	public DataSendHandlerFilter() {

		logCenterType = Repository.getSysConfig().getLogCenterType();

		//初始化kafka
		if (logCenterType == Constant.LogcenterType.KAFKA){
			KafkaProducerHelper.init(Repository.getCityConfig().getCityId(), Repository.getSysConfig());
			log.info("初始化kafka");
		}
	}

	@Override
	public void filter(DataPackage dataPackage) {

		GpsData gpsData = dataPackage.getTargetData();

		/*重复数据和时间格式错误数据不发送*/
		if (null != gpsData && !gpsData.isError() && logCenterType == Constant.LogcenterType.KAFKA) {
			if (gpsData.isGps()) {
				KafkaProducerHelper.sendData(gpsData.toGpsStr(resourceType));
			}

			if (gpsData.isStn()) {
				KafkaProducerHelper.sendData(gpsData.toStnStr(resourceType));
			}
		}
	}
}

设置系统要使用的 Filter ,根据具体业务有所不同。

public class HanderFilterUtil {
	
	private static List<IDataHandlerFilter> list;

	/**
	 * 这个是有先后顺序的
	 * @return
	 */
	public static List<IDataHandlerFilter> getDefaultFilter(SysConfig sysConfig, CityConfig cityConfig){
		
		if (null == list){
			list = new ArrayList<>();
		}
		
		//默认提供接收日志、重复校验、时间格式校验、属性校验、数据转发过滤器
		list.add(new RepeatHandlerFilter());
		list.add(new DataLogHandlerFilter());
		list.add(new DataSendHandlerFilter());
		// ......
		return list;
	}
}

最后我们通过调用 getDefaultFilter 方法来决定我们系统中使用哪几种 Filter 来处理数据。


以上所述就是小编给大家介绍的《Filter 设计模式编码实践》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Modeling the Internet and the Web

Modeling the Internet and the Web

Pierre Baldi、Paolo Frasconi、Padhraic Smyth / Wiley / 2003-7-7 / USD 115.00

Modeling the Internet and the Web covers the most important aspects of modeling the Web using a modern mathematical and probabilistic treatment. It focuses on the information and application layers, a......一起来看看 《Modeling the Internet and the Web》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

html转js在线工具
html转js在线工具

html转js在线工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试