几种设计模式总结2

(本文为软构博客第七篇)

第三类为行为模式

1.策略模式

用途:有多种不同的算法来实现同一个任务,但需要client根据需要动态切换算法。

实现方法:为不同的实现算法构造抽象接口,利用delegation,运行时动态传入client倾向的算法
类实例。即:定义一个Stragedy接口,具体方法不实现。定义n个算法类xxStragedy实现这个接口,里面用自己的算法实现这个方法。在调用方法的类中增加成员变量Stagedy,方法参数增加一个Stragedy接口,实现方式为使用传进来的Stragedy参数来调用具体算法。这就是核心,即将具体实现委托给了外部的算法类。这种委托具体而言是Aggregation,(较弱的,可动态变化)。客户端new一个具体算法类实例作为参数传入方法中即可。

举例:

2.模板模式

这个比较简单。总结来讲就是使用继承和重写实现。抽离出通用逻辑放入抽象类中,子类具体实现这些抽象方法。

 3.迭代器模式

用途:客户端希望对放入容器/集合类的一组ADT对象进行遍历访问,而无需关心容器的具体类型

实现方法:关键在于要迭代遍历的对象实现Iterable接口,提供方法new出一个具体迭代器,即构造方法里return new xxIterator();具体迭代器方法实现Iterator接口,重写三个方法。

客户端使用:Iterator iterator = 要迭代遍历的对象实例.iterator();然后按照正常迭代器使用方法遍历即可。

 举例:

 4.visitor模式

用途:客户端要观察到类中的一些信息。

实现方法:就是创建一个Vistor接口,里面有一个visit方法,会return某类型的值。要观察xx信息就创建xxvistor实现Visitor接口,里面实现具体的visitor方法。参数为要观察的信息所在类。里面具体实现只要利用这个类的一些方法得到属性调用,按需求操作即可。最后返回要观察得到的值。被观察的类中添加一个带返回值的accept类,参数为Visitor接口,里面用传入的参数调用visitor方法:return visitor.visit(this);

客户端调用:被观察类实例.accept(new  xxvisitor());

举例:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值