[设计模式]--Design Patterns Explained学习笔记[chap5]

来源:互联网 发布:多线程并发处理数据 编辑:程序博客网 时间:2024/05/20 11:21

5 An Introduction to Design Patterns

5.1 Overview of Design Patterns

设计模式就是将面向对象软件设计中的经验通过一定的方式表达出来,帮助作出有利于系统复用的选择,避免设计损害了系统的复用性,通过提供一个显式类和对象作用关系以及他们之间潜在联系的说明规范,甚至能够提高已有系统的文档管理和系统维护的有效性,简而言之,设计模式可以帮助设计者更好更快的完成系统设计。

设计模式的四要素:

1. 模式名称(Pattern Name):一个注记名,基于模式词汇表,程序员就可以在一起就此涉及模式进行讨论,所以应找到恰当的模式名称。

2. 问题(Problem):描述了在何时使用设计模式,阐述了该设计模式存在的前因后果,有时候,问题部分会包括使用该设计模式必要的先决条件。

3. 解决方案(Solution):描述了设计的组成部分,他们之间的相互关系,各自的职责,如何相互协作。因为设计模式是一个模版,用于多种不同的场合,所以解决方案并不会描述一个特定具体的设计或者实现,而是提供一些问题他们共同的抽象描述,以及如何用一个一般意义的元素组合(类和接口的组合)来解决这个问题。

4. 效果(Consequences):模式使用的效果以及使用模式应权衡的问题,软件效果大多关注于对时间以及空间的衡量,但他们也表述了对语言和实现问题,复用是面向对象设计的要素,所以模式效果应该包括它对系统的灵活性,扩充性,可移植性的影响,显示的列出这些效果对理解和评价这个设计模式很有帮助。

设计模式中最为著名的书籍是GoF的《Design Patterns: Elements of Reusable Object-Oriented Software》,该书从创建型,结构型与行为型三个方面对软件设计中的经验组合为23个模式,同时给出如何应用各种模式进行软件设计的范例。

5.2 Why Study Design Patterns

学习设计模式的原因如下:

1、复用已有的高质量的对通用问题的解决方案;

2、建立通用的术语提高团队间交流的效率;

3、站在更高的角度看待问题,提高设计水平;

4、提高团体交流与个人学习能力;

5、改善代码的可维护性;

6、演示基本的面向对象设计原则;

7、对于大型继承体系寻找更好的替换策略。

5.3 The Classification of Design Patterns

根据目的准则(即模式用于完成什么样的工作)对23条模式分为创建型,结构型,行为型三类:

1、创建型模式(5种)

Abstract Factory:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类;

Builder:将一个复杂对象的创建与其表示分离,使得同样的构建过程可以创建不同的表示;

Factory Method:定义一个用于创建对象的接口,让子类决定实例化哪一个类,它使一个类的实例化延迟到其子类;

Prototype:用原型实例化指定创建对象的种类,并且通过拷贝这些原型创建新的对象;

Singleton:保证一个类只有一个实例,并提供一个访问它的全局访问点。

2、结构型模式(7种)

Adapter:将一个类的接口转换为客户希望的另外一个接口,它使得原本由于接口不兼容而不能一起工作的类可以一起工作;

Bridge:将抽象部分与其实现部分分离,使他们可以独立地变化;

Composite:将对象组合成树型结构以表示“部分――整体”层次结构,使得用户对单个对象与组合对象的使用具有一致性;

Decorator:动态地为对象添加一些额外的职责,就扩展功能来说,它比生成子类更为灵活;

Façade:为子系统中的一组接口提供一个一致的界面,它定义了一个高层接口,这个接口使得这一子系统更加容易使用;

Flyweight:运用共享技术有效地支持大量细粒度的对象;

Proxy:为其他对象提供了一种代理以控制对这个对象的访问。

3、行为型模式(11种)

Chain of Responsibility:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象练成一条链,并沿着这条链传送请求,直到有一个对象处理为止;

Command:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作;

Interpreter:给定一个语言,定义它的文法的一种表示,并定义了一个解释器,这个解释器使用该表示来解释语言中的句子;

Iterator:提供一种方法顺序地访问一个聚合对象中的各个原色,而不需要暴露该对象的内部表示;

Mediator:用一个中介对象来封装一系列的对象交互,中介这使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互;

Memento:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象外部保存这个状态,这样以后就可将该对象恢复到原先保存的状态;

Observer:定义对象间的一种一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新;

State:允许一个对象在其内部状态发生改变时改变它的行为,对象看起来似乎修改了它的类;

Strategy:定义一系列的算法,把他们一个个封装起来,并且使他们可以相互依赖,本模式使得算法可以独立于它的客户而变化;

Template Method:定义一个操作中算法的骨架,而将一些步骤延迟到子类中,它使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤;

Visitor:表示一个作用于某对象结构中的各元素的操作,使你可以在不改变元素的类的前提下定义作用于这些对象元素的新操作。

根据范围准则(即模式是用于类还是对象)分为类模式与对象模式两种,类模式指集中于处理类间关系的模式,有Factory Method, Adapter, Interpreter, Template Method,其他的全部属于对象模式。

 
原创粉丝点击