其他分享
首页 > 其他分享> > 设计测试

设计测试

作者:互联网

有以下三类模式:创建型模式、结构型模式、行为型模式

创建型模式(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