(本文为软构博客第七篇)
第三类为行为模式
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());
举例: