博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
装饰模式的巧妙运用
阅读量:4927 次
发布时间:2019-06-11

本文共 580 字,大约阅读时间需要 1 分钟。

背景:

IVirtualTool接口getConfig setConfig process

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

 

需要扩展功能:

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

 

古老的实现:

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

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

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

 

装饰模式实现:

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

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

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

 

妙用1:

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

 

妙用2:

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

 

妙用3:

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

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

转载于:https://www.cnblogs.com/zwgtx/p/9350499.html

你可能感兴趣的文章
SQL Server复制入门(二)----复制的几种模式
查看>>
javascript 简单认识
查看>>
tomcat 系统架构与设计模式 第二部分 设计模式 转
查看>>
scanf中的%[^\n]%*c格式
查看>>
启动Eclipse报Initializing Java Tooling错误解决方法
查看>>
用jquery来实现类似“网易新闻”横向标题滑动的移动端页面
查看>>
(原)基于物品的协同过滤ItemCF的mapreduce实现
查看>>
CSS可以和不可以继承的属性
查看>>
eclipse每次当我按ctrl+鼠标点击代码,自动关闭,产生原因及解决办法!!
查看>>
hbase
查看>>
用PHP将Unicode 转化为UTF-8
查看>>
HDOJ1002 A+B Problem II
查看>>
ADB server didn't ACK(adb不能开启
查看>>
网页内容抓取
查看>>
分布式和集群的区别
查看>>
Python基础(三)
查看>>
Sql server在cmd下的使用
查看>>
【BZOJ 1019】 1019: [SHOI2008]汉诺塔 (DP?)
查看>>
织梦DEDECMS系统中文章内容为空 用SQL语句如何删除?
查看>>
load data导入数据之csv的用法
查看>>