装饰模式的巧妙运用

背景:

IVirtualTool接口getConfig setConfig process

派生出各种算子,例如模板算子、找圆算子、找边算子

 

需要扩展功能:

依照模板匹配结果,含有坐标平移、旋转、伸缩、镜像、翻转等变换,所有算子要支持相应坐标变换

 

古老的实现:

提供一个坐标变换的基类,供所有算子在getConfig setConfig process  中调用

刚开始只实现平移和旋转,所有算子都调用了基类接口。

现在要扩展伸缩等变换,基类要修改和添加接口,导致所有算子要修改。

 

装饰模式实现:

把坐标变换做成一个独立算子,实现getConfig、setConfig、process。

所有算子按需安装坐标变换功能。

把坐标算子包装在外面,由它在坐标转换后调用各个业务算子,并且把坐标转换后的点列数据传给各个业务算子。

 

妙用1:

各个业务算子可以按需,安装或卸载坐标转换功能,只需要一行代码。

 

妙用2:

坐标转换需要扩展功能,只需要修改坐标转换一个算子,各个业务算子不用动,打到业务和坐标转换相互解耦。

 

妙用3:

业务算子(找边,找圆之类的)和坐标转换算子相互独立,使得彼此更易稳定。

如果坐标变换要扩展镜像等功能,只需要修改坐标变换算子,无需修改各个业务算子。

posted @ 2018-07-22 16:13  醉卧古藤下  阅读(94)  评论(0编辑  收藏  举报