四巨头23种设计模式的意图

了解设计模式的意图,是在代码重构中浮现并识别设计模式的关键。
本文将四巨头在《设计模式》一书的23种设计模式的意图放在一个页面里,方便查阅。四巨头把这23种设计模式按照创建、结构、行为分为三类。

创建(1. 抽象工厂、2. 建造者、3. 工厂方法、4. 原型、5. 单例)

  1. 抽象工厂
    Intent意图:Provide an interface for creatingfamilies of related or dependent objects without specifying their concreteclasses. 提供一个接口,来创建一些彼此相关或依赖的对象族,而无须指定其具体的类。


    Abstract Factory抽象工厂
  2. 建造者
    Intent意图:Separate the construction of acomplex object from its representation so that the same construction processcan create different representations. 将一个复杂对象的构造与其表现形式进行分离,使得同样的构造过程能创建出不同的表现形式。


    Builder建造者
  3. 工厂方法
    Intent意图:Define an interface for creatingan object, but let subclasses decide which class to instantiate. Factory Methodlets a class defer instantiation to subclasses. 定义一个用于创建一个对象的接口,但让子类来决定具体实例化哪个类。工厂方法模式能让一个类将实例化的工作延迟到各个子类中来进行。


    Factory Method工厂方法
  4. 原型
    Intent意图:Specify the kinds of objects tocreate using a prototypical instance, and create new objects by copying thisprototype. 使用一个原型实例来指定所要创建的对象的类型,并通过复制该原型来创建新的对象。


    Prototype原型
  5. 单例
    Intent意图:Ensure a class only has oneinstance, and provide a global point of access to it. 确保一个类仅有一个实例,并提供一个对其进行访问的全局访问点。


    Singleton单例

结构(1. 适配器、2. 桥接、3. 组合、4. 装饰器、5. 门面、6. 轻量级、7. 代理)

  1. 适配器
    Intent意图:Convert the interface of a classinto another interface clients expect. Adapter lets classes work together thatcouldn't otherwise because of incompatible interfaces. 将一个类的接口转换成其客户端所期望的另一个接口。适配器模式能让以前因为接口不兼容而无法协同工作的一些类可以在一起工作。


    Adapter适配器
  2. 桥接
    Intent意图:Decouple an abstraction from its implementation so that the two can vary independently. 将一个抽象与其实现解耦合,使得两者能够独立地发生改变。


    Bridge桥接
  3. 组合
    Intent意图:Compose objects into treestructures to represent part-whole hierarchies. Composite lets clients treatindividual objects and compositions of objects uniformly. 将若干对象组合成树的结构,来表示“部分-整体”的层次结构。组合模式让客户端能统一地对待单个对象和对象的复合体。


    Composite组合
  4. 装饰器
    Intent意图:Attach additionalresponsibilities to an object dynamically. Decorators provide a flexiblealternative to subclassing for extending functionality. 为一个对象动态地附加额外的职责。除了子类化这个方案以外,装饰器模式为扩展代码功能提供了另一个灵活的备选方案。


    Decorator装饰器
  5. 门面
    Intent意图:Provide a unified interface to aset of interfaces in a subsystem. Facade defines a higher-level interface thatmakes the subsystem easier to use. 为一个子系统中的一系列接口提供一个统一的接口。门面模式定义了一个更高层次的接口,而令该子系统使用起来更加容易。


    Facade门面
  6. 轻量级
    Intent意图:Use sharing to support largenumbers of fine-grained objects efficiently. 使用共享来有效地支持巨大数量的细粒度的对象的使用。


    Flyweight轻量级
  7. 代理
    Intent意图:Provide a surrogate orplaceholder for another object to control access to it. 为另一个对象提供一个代理或占位者,来控制对该对象的访问。


    Proxy代理

行为(1. 责任链、2. 命令、3. 翻译器、4. 迭代器、5. 中介者、6. 纪念品、7. 观察者、8. 状态、9. 策略、10. 模版方法、11. 访问者)

  1. 责任链
    Intent意图:Avoid coupling the sender of arequest to its receiver by giving more than one object a chance to handle therequest. Chain the receiving objects and pass the request along the chain untilan object handles it. 通过让多个对象各自有一次机会来处理一个请求的方式,来避免将一个请求的发送者与其接受者相耦合。将各个接收该请求的对象链接起来,并将该请求沿着这个链条传递下去,直到有一个对象处理了该请求为止。


    Chain of Responsibility责任链
  2. 命令
    Intent意图:Encapsulate a request as anobject, thereby letting you parameterize clients with different requests, queueor log requests, and support undoable operations. 以一个对象的形式封装一个请求,从而能用不同请求来对客户端进行参数化,将请求进行排队或记录日志,并支持可撤销的操作。


    Command命令
  3. 翻译器
    Intent意图:Given a language, define arepresention for its grammar along with an interpreter that uses therepresentation to interpret sentences in the language. 给定一种语言,针对其语法定义一个表示形式,并提供一个能使用该表示形式的翻译器,来翻译这种语言的语句。


    Interpreter翻译者
  4. 迭代器
    Intent意图:Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation. 提供一种方法来顺序访问一个聚合对象的各个元素,而无须暴露该对象的底层表示。


    Iterator迭代器
  5. 中介者
    Intent意图:Define an object thatencapsulates how a set of objects interact. Mediator promotes loose coupling bykeeping objects from referring to each other explicitly, and it lets you varytheir interaction independently. 定义了一个对象,来将一系列对象之间如何进行交互进行封装。中介者模式能通过让这些对象免于显式地相互进行引用而促进松耦合,并能够做到独立地去改变这些对象之间的交互。


    Mediator中介者
  6. 纪念品
    Intent意图:Without violating encapsulation, capture and externalize an object's internal state so that the object can be restored to this state later. 在不破坏封装的前提下,将一个对象的内部状态进行捕获并外部化,使得该对象能够在以后被恢复到这个内部状态。


    Memento纪念品
  7. 观察者
    Intent意图:Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically. 在若干对象之间定义一个一对多的依赖关系,使得当一个对象改变状态时,其所有的依赖者都被通知并被自动更新。


    Observer观察者
  8. 状态
    Intent意图:Allow an object to alter itsbehavior when its internal state changes. The object will appear to change itsclass. 当一个对象的内部状态改变时,允许该对象相应地改变其行为。这样该对象看起来好像改变了其所属的类。


    State状态
  9. 策略
    Intent意图:Define a family of algorithms,encapsulate each one, and make them interchangeable. Strategy lets thealgorithm vary independently from clients that use it. 定义一个算法族,对每一个算法进行封装,并令其能够实现互换。策略模式能让算法独立于那些使用它的客户端而发生变化。


    Strategy策略
  10. 模版方法
    Intent意图:Define the skeleton of analgorithm in an operation, deferring some steps to subclasses. Template Methodlets subclasses redefine certain steps of an algorithm without changing thealgorithm's structure. 定义一个操作中的算法的骨架,并将其中一些步骤延迟到若干子类中去执行。模板方法模式能让这些子类重新定义一个算法的某些步骤,而无须改变该算法的结构。


    Template Method模板方法
  11. 访问者
    Intent意图:Represent an operation to beperformed on the elements of an object structure. Visitor lets you define a newoperation without changing the classes of the elements on which it operates. 用来表示即将要施加到一个对象结构的各个元素之上的一个操作。访问者模式能用来定义一个新的操作,而无须改变其所操作的上述各个元素所属的类。


    Visitor访问者
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266