3种设计模式知识要点"> 3种设计模式知识要点">
← 返回目录

第 5 卷

第 5 / 9 卷作者:000日期:

  • Target 目标角色

该角色定义把其他类转换为何种接口,也就是我们的期望接口,例子中的 IUserInfo 接口就是目标角色。

  • Adaptee 源角色

你想把谁转换成目标角色,这个“谁”就是源角色,它是已经存在的、运行良好的类或对象,经过适配器角色的包装,它会成为一个崭新、靓丽的角色。

  • Adapter 适配器角色

适配器模式的核心角色,其他两个角色都是已经存在的角色,而适配器角色是需要新建立的,它的职责非常简单:把源角色转换为目标角色,怎么转换?通过继承或

是类关联的方式。

使用场景:

你有动机修改一个已经投产中的接口时,适配器模式可能是最适合你的模式。比如系统扩展了,需要使用一个已有或新建立的类,但这个类又不符合系统的接口,怎

么办?使用适配器模式,这也是我们例子中提到的。

注意事项:

详细设计阶段不要考虑使用适配器模式,使用主要场景为扩展应用中。

对象适配器:

对象适配器和类适配器的区别:

类适配器是类间继承,对象适配器是对象的合成关系,也可以说是类的关联关系,这是两者的根本区别。(实际项目中对象适配器使用到的场景相对比较多)。

14.迭代器模式(Iterator Pattern)

定义:Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.(它提供一种方法访问一个容器对

象中各个元素,而又不需暴露该对象的内部细节。)

  • Iterator 抽象迭代器

抽象迭代器负责定义访问和遍历元素的接口,而且基本上是有固定的 3 个方法:

first()获得第一个元素,next()访问下一个元素,isDone()是否已经访问到底部(Java 叫做 hasNext()方法)。

  • ConcreteIterator 具体迭代器

具体迭代器角色要实现迭代器接口,完成容器元素的遍历。

  • Aggregate 抽象容器

这样的方法,在 Java 中一般是 iterator()方法。

  • Concrete Aggregate 具体容器

具体容器实现容器接口定义的方法,创建出容纳迭代器的对象。

ps:迭代器模式已经被淘汰,java 中已经把迭代器运用到各个聚集类(collection)中了,使用 java 自带的迭代器就已经满足我们的需求了。

15.组合模式((Composite Pattern))

定义:Compose objects into tree structures to represent part-whole hierarchies.Composite lets clients treat individual objects and compositions of

objects uniformly.(将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。)

  • Component 抽象构件角色

定义参加组合对象的共有方法和属性,可以定义一些默认的行为或属性,比如我们例子中的 getInfo 就封装到了抽象类中。

  • Leaf 叶子构件

叶子对象,其下再也没有其他的分支,也就是遍历的最小单位。

  • Composite 树枝构件

树枝对象,它的作用是组合树枝节点和叶子节点形成一个树形结构。

树枝构件的通用代码:

public class Composite extends Component { //构件容器

private ArrayList<Component> componentArrayList = new ArrayList<Component>();

//增加一个叶子构件或树枝构件 public void add(Component component){

this.componentArrayList.add(component);

} //删除一个叶子构件或树枝构件

public void remove(Component component){ this.componentArrayList.remove(component);

} //获得分支下的所有叶子构件和树枝构件

public ArrayList<Component> getChildren(){ return this.componentArrayList;

} }

  • 维护和展示部分-整体关系的场景,如树形菜单、文件和文件夹管理。
  • 从一个整体中能够独立出部分模块或功能的场景。

注意:

只要是树形结构,就考虑使用组合模式。

16.观察者模式(Observer Pattern)

定义:Define a one-to-many dependency between objects so that when one object changes state,all its dependents are notified and updated automatically.

(定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。)

  • Subject 被观察者

定义被观察者必须实现的职责,它必须能够动态地增加、取消观察者。它一般是抽象类或者是实现类,仅仅完成作为被观察者必须实现的职责:管理观察者并通知观

察者。

  • Observer 观察者

观察者接收到消息后,即进行 update(更新方法)操作,对接收到的信息进行处理。

  • ConcreteSubject 具体的被观察者

定义被观察者自己的业务逻辑,同时定义对哪些事件进行通知。

  • ConcreteObserver 具体的观察者

每个观察在接收到消息后的处理反应是不同,各个观察者有自己的处理逻辑。

被观察者通用代码:

public abstract class Subject { //定义一个观察者数组

private Vector<Observer> obsVector = new Vector<Observer>();

//增加一个观察者 public void addObserver(Observer o){

this.obsVector.add(o);

} //删除一个观察者

public void delObserver(Observer o){ this.obsVector.remove(o);

} //通知所有观察者

public void notifyObservers(){ for(Observer o:this.obsVector){

o.update();

}

全站分卷索引 · 9 卷
  1. 1第 1 卷
  2. 2第 2 卷
  3. 3第 3 卷
  4. 4第 4 卷
  5. 5第 5 卷
  6. 6第 6 卷
  7. 7第 7 卷
  8. 8第 8 卷
  9. 9第 9 卷