设计测试
作者:互联网
有以下三类模式:创建型模式、结构型模式、行为型模式
创建型模式(Creational patterns)
工厂方法模式(Factory Method pattern)
当client不知道要创建哪个具体类的实例,或者不想再client代码中指明要具体创建的实例时,用工厂方法。
工厂模式:将创建一个对象的方法委托给另一个类(工厂类)来实现
Client用工厂方法来创建实例,得到的实例类型是抽象接口而非具体类
静态工厂方法(在工厂方法前加static):既可以在ADT内部实现,也可以单独创建工厂类
该设计模式是OCP(扩展/开放原则)的一个体现。
优点:实现信息隐藏
缺点:需要额外创建工厂类,程序更复杂
结构型模式(Structural patterns)
适配器模式(Adapter)
将某个类/接口转换为client期望的其他形式(主要解决接口不匹配问题)
通过增加一个接口,将已存在的子类封装起来,client面向接口编程,从而隐藏了具体子类
装饰器模式(Decorator)
对一个类的功能进行扩充(实现特性的组合)
装饰器在运行时组合特性;继承在编译时组合特性
行为型模式(Behavioral patterns)
策略模式(Strategy)
使用功能的时候不访问功能实现,访问接口(在多个功能间灵活切换)
模板模式(Template Method)
共性的操作步骤在抽象类中公共实现,差异化的步骤在各个子类中实现
使用继承和重写来实现模板模式
模板模式在框架中应用广泛
抽象类中有一些方法用final来修饰,这些方法即为模板方法
迭代器(Iterator)
将集合类的迭代操作委托给迭代器来实现。
让自己的集合类实现 Iterable 接口,并实现自己的独特 Iterator 迭代器 (hasNext, next, remove) ,允许客户端利用这个迭代器进行显式或隐式的迭代遍历:
Visitor模式
把类中的某些功能委托给别人实现(实现功能时要反过来用到原来的类)
例
Visitor vs Iterator
迭代器:以遍历的方式访问集合数据而无需暴露其内部表示,将“遍历”这项功能delegate到外部的iterator对象。
Visitor:在特定ADT上执行某种特定操作,但该操作不在ADT内部实现,而是delegate到独立的visitor对象,客户端可灵活扩展/改变visitor的操作算法,而不影响ADT
迭代器和Vistor模式结构相同,只是方法不同(本质上无区别)
Strategy vs visitor
二者都是通过delegation建立两个对象的动态联系
但是Visitor强调是的外部定义某种对ADT的操作,该操作于ADT自身关系不大(只是访问ADT),故ADT内部只需要开放accept(visitor)即可,client通过它设定visitor操作并在外部调用。
而Strategy则强调是对ADT内部某些要实现的功能的相应算法的灵活替换。这些算法是ADT功能的重要组成部分,只不过是delegate到外部strategy类而已。
区别:visitor是站在外部client的角度,灵活增加对ADT的各种不同操作(哪怕ADT没实现该操作),strategy则是站在内部ADT的角度,灵活变化对其内部功能的不同配置。
标签:ADT,迭代,实现,visitor,模式,client,测试,设计 来源: https://www.cnblogs.com/492hyb/p/16372919.html