`

23 个设计模式的意图(转)

阅读更多
Abstract Factory(抽象工厂):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

Adapter(适配器模式):将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

Bridge(桥接模式): 将抽象部分与它的实现部分分离,使它们都可以独立地变化。

Builder(构建模式):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

Chain of Responsibility(责任链模式):为解除请求的发送者和接收者之间的耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。

Command(命令模式):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。

Composite:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得客户对单个对象和复合对象的使用具有一致性。

Decorator(装饰模式):动态地给一个对象添加一些额外的职责。就扩展功能而言,Decorator模式比生成子类方式更为灵活。

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

Factory Method(工厂模式):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory Method使一个类的实例化延迟到其子类。

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

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

Iterator(迭代器模式):提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示。

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

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

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

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

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

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

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

Strategy:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法的变化可独立于使用它的客户。

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

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

1.     Abstract Factory
抽象工厂
提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。(别名:Kit)
实例描述:

交互图

优缺点

    优点:(1)封装创建过程。客户不用知道类厂是如何创建类实例的,类厂封闭了所有创建的细节。这样可选择不同的创建方法,增加了灵活性。 (2)将客户与具体类隔离,提高了各自的可重用性。
    缺点:Factory类层次与具体类层次通常是平行的(即一一对应的)。增加一个具体类,一般也要相应地增加一个factory类,增加了系统复杂度。

实现

    (1)Abstract Factory类中通常是一组Factory Method的集合。个人认为与Factory Method模式没有本质区别。
    (2)通常可以把工厂作为单件。

2.     Builder
生成器
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
各类之间的交互关系如下图所示:

3.     Factory Method
工厂方法
定义一个用于创建对象的接口,让子类决定实例化哪一个类。使一个类的实例化延迟到其子类。(别名:虚构造器 Virtual Constructor)

4.     Prototype
原型
用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。

5.     Singleton
单件
保证一个类仅有一个实例,并提供一个访问它的全局访问点。

结构型模式共7种

1.     Adapter

适配器
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能在一起工作的那些类可以一起工作。(别名:包装器 Wrapper)

2.     Bridge
桥接
将抽象部分与它的实现部分分离,使它们都可以独立的变化。(别名:Handle/Body)

例如

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

4.     Decorator
装饰
动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。(别名:包装器Wrapper)

5.     Fa?ade
外观
为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

6.     Flyweight
享元
运用共享技术有效地支持大量细粒度的对象。

这么模式中最重要的概念是内部状态和外部状态。内部状态存储于flyweight中,包含了独立于flyweight场景的外部状态,这些信息使得flyweight可以被共享;外部状态取决于flyweight场景,并根据场景变化,因此不可共享。用户负责在必要的时候将外部状态传递给flyweight.


1) Remote Proxy 可以隐藏一个对象存在于不同地址空间的事实;
2) Virtual Proxy 可以进行优化,例如在显示包含大图片的文档时,在初始时可以不显示图片,只显示图片的大小,根据需要再创建图片对象,显示图片;
3) Protection Proxies 可以在访问一个对象是附加一些内务处理,如权限验证等
4) Smart Reference 可以智能地管理代理引用的对象,如对引用的对象记数,没有引用时释放对象;为引用对象加锁等;

7.     Proxy
代理
为其它对象提供一种代理以控制对这个对象的访问。(别名:Surrogate)

行为模式共11种

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


CoR的优点:
因为无法预知来自外界的请求是属于哪种类型,每个类如果碰到它不能处理的请求只要放弃就可以。无疑这降低了类之间的耦合性。

缺点是效率低,因为一个请求的完成可能要遍历到最后才可能完成,当然也可以用树的概念优化。 在Java AWT1.0中,对于鼠标按键事情的处理就是使用CoR,到Java.1.1以后,就使用Observer代替CoR

扩展性差,因为在CoR中,一定要有一个统一的接口Handler.局限性就在这里。

2.     Command
命令
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。(别名:动作 Action 事务 Transaction)

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

4.     Iterator
迭代器
提供一种方法顺序访问一个聚合对象中的各个元素,而不需要暴露该对象的内部表示。(别名:游标 Cursor)

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

6.     Memento
备忘录
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。(别名:Token)


对象交互图

   一般情况下,Memento要存取Originator的私有数据,一种方法是把Memento设为Originator的友元,让Memento自己来取数据。另一种方法是Originator自己把自己的私有数据告诉给Memento。

7.     Observer
观察者
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。(别名:依赖Dependents,发布-订阅 Publish-Subscribe)

8.     State
状态
允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。(别名:状态对象 Objects for States)

9.     Strategy
策略
定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。本模式使得算法可以独立于使用它的客户而变化。(别名:政策 Policy)

10.           Template Method
模板方法
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。/SPAN>Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

11.           Visitor
访问者
表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作
分享到:
评论

相关推荐

    23种设计模式源码(java版)及设计模式帮助文档

    包含23种设计模式的全部java版源代码。很好用的还是设计模式的帮助文档,该文档有每个设计模式的定义,UMl图,所需类,意图,适应性,优缺点,还有对应的类的源代码!

    23种设计模式彩图-pdf高清版

    23种设计模式彩图-pdf高清版, 包含uml图, 模式说明,意图等

    设计模式23种经典模式

    设计模式23种经典模式 意图 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。(GoF)

    C#23种设计模式_示例源代码及PDF

    解释器模式将描述怎样 在 有了一个简单的文法后, 使用模式设计解释这些语句。 在解释器模式里面提到的语言是指任 何解释器对象能够解释的任何组合。在解释器模式中需要定义一个代表 文法的命令类的等 级结构,也...

    23个设计模式(可供打印).

    收集菜鸟教程上GoF的23个经典设计模式,编辑成Excel文档,可供打印,打印时设置:(方向:横向,缩放:将所有列调整为一列,左右页边距:0),包含信息有:模式名称、英文名称、模式类型、意图、主要解决、何时使用、如何解决、...

    使用设计模式改善程序结构

    设计模式是对特定问题经过...本文试图从另一个角度(设计模式的意图、动机)来看待设计模式,通过这种新的思路,设计模式 会变得非常贴近你的设计过程,并且能够指导、简化你的设计,最终将会导出一个优秀的解决方案。

    23个设计模式总结.xlsx

    设计模式 意图 适用的场景 关键实现过程 优点 缺点 备注

    C++单例设计模式

    C++单例设计模式: 单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如...

    设计模式总结 考试复习资料

    本系列主要记录设计模式的意图是什么,它要解决一个什么问题,什么时候可以使用它;它是如何解决的,掌握它的结构图,记住它的关键代码;能够想到至少两个它的应用实例,一个生活中的,一个软件中的;这个模式的优...

    设计模式迷你手册.chm

    设计模式迷你手册.chm,大小仅 188 KB,图文并茂,介绍性强,每个设计模式附有 C++、C# 示例源码示例。 目录: 创建型 Factory Method Abstract Factory Builder Prototype Singleton 结构型 Adapter Bridge ...

    JavaEE设计模式解析与应用

    《Java EE设计模式解析与应用》一书分析每种模式的意图,并通过各种可供选择的示例代码演示其实现,从而帮助广大开发者改进代码质量并提升架构设计水平。本书首先 资源太大,传百度网盘了,链接在附件中,有需要的...

    java设计模式期末考试选择题100道

    适合Java设计模式期末考试选择题复习,形式如下: 10.(单选题)Facade(外观)模式的意图是 正确答案: A A.希望简化现有系统的使用方法,你需要定义自己的接口 B.将一个无法控制的现有对象与一个特定借口相匹配。 C....

    GoF设计整理(C#实现)在示意图、C#代码的基础上,又增加了设计模式意图、使用场景和重构成本,并增加了PDF书签功能。以后还将持续完善。下载.

    设计模式手册GoF设计整理(C#实现)在示意图、C#代码的基础上,又增加了设计模式意图、使用场景和重构成本,并增加了PDF书签功能。以后还将持续完善。下载.

    java常用设计模式

    一个程序员对设计模式的理解: “不懂”为什么要把很简单的东西搞得那么复杂。后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开一把锁的模式,...

    Java 设计模式详解超详细(含示例代码)

    Java设计模式是软件开发中常见问题的标准解决方案,它们是经过时间...要使用Java设计模式,需要理解它们的意图、适用场景以及如何实现它们。同时,要注意不要过度使用设计模式,只在必要的时候使用它们来解决实际问题。

    设计模式2-结构型模式&设计模式基本原则

    从意图等几个方面较为详细的介绍设计模式中的结构型模式,同时介绍设计模式的几个原则

    C++ State 设计模式 演示源代码

    http://blog.csdn.net/feiyinzilgd/archive/2011/04/05/6302717.aspx (C++ State 设计模式博客)演示源代码。用C++实现并较详细的讲述了Sate模式的意图和工作状态。

    设计模式1-创建型模式

    从意图等几个方面较为详细的介绍设计模式中的创建型模式

    设计模式3-行为型模式

    从意图等几个方面较为详细的介绍设计模式中的行为型模式

Global site tag (gtag.js) - Google Analytics