A01—设计模式概述

1. 起源

模式 是由模式之父 (Christopher Alexander,克里斯托弗·亚历山大)及其研究团队对住宅和周边环境进行大量调查研究和资料收集之后,分析得出人们对舒适住宅和环境存在一些共同的认同规律,并将这些规律归纳为253个模式。

模式之父在他的经典著作《建筑的永恒之道》中对模式给出了定义:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的核心解决方案,通过这种方式,我们可以无数次地重用已有的成功解决方案,无须再重复相同的工作。

2. 诞生

软件模式的诞生是由“四人组(Gang of Four, GoF)”将模式的概念引入软件工程领域开始。软件模式(Software Patterns)是在软件开发中某些可重现问题的一些有效解决方法,其并非仅限于设计模式,还包括架构模式、分析模式和过程模式等。实际上,在软件开发生命周期的每一个阶段都存在着一些被认同的模式。

软件模式主要由四部分构成:问题描述(需要解决的问题是什么)、前提条件(何种情况下使用)、解决方案(如何解决)、最终效果(有哪些优缺点)。

3. 设计模式

设计模式(Design Pattern)是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结,其是软件模式中研究最深入的一个分支,也是软件工程的基石。设计模式用于在特定的条件下为一些重复出现的软件设计问题提供合理的、有效的解决方案。

GoF在1994年归纳发表了23中在软件开发使用频率较高的设计模式, 其所著的《Design Patterns:Elements of Resuable Object-Oriented Software》标志着设计模式正式成为面向对象软件工程的一个重要研究分支。

设计模式一般包含模式名称、问题、目的、解决方案、效果等组成要素。模式名称(Pattern Name)通过一组词来描述模式的问题、解决方案和效果,以便使用者能够更准确的理解,通常使用功能或模式结构命名;问题(Problem) 描述何种情况下使用该模式;解决方案(Solution)描述设计模式的组成成分,以及它们之间的关系,通常使用UML类图和核心代码来描述;效果(Consequence) 描述模式的优缺点以及在使用时如何权衡的问题。

GoF 设计模式只有23个,根据其用途将它们分为:创建型模式(Creational Pattern)主要用于描述如何创建对象;结构型模式(Structural Pattern)主要用于描述如何实现类或对象的组合;行为型(Behavioral)主要用于描述类或对象怎样交互以及怎样分配职责。

(1)创建型模式(Creational Pattern)
(2)结构型模式(Structural Pattern)
  • 适配器模式(Adapter Pattern)
  • 桥接模式(Bridge Pattern)
  • 组合模式(Composite Pattern)
  • 装饰模式(Decorator Pattern)
  • 外观模式(Facade Pattern)
  • 享元模式(Flyweight Pattern)
  • 代理模式(Proxy Pattern)
(3)行为型模式(Behavioral Pattern)
  • 职责链模式(Chain of Responsibility Pattern)
  • 命令模式(Command Pattern)
  • 解释器模式(Interpreter Pattern)
  • 迭代器模式(Iterator Pattern)
  • 中介者模式(Mediator Pattern)
  • 备忘录模式(Memento Pattern)
  • 观察者模式(Observer Pattern)
  • 状态模式(State Pattern)
  • 策略模式(Strategy Pattern)
  • 模板方法模式(Template Method Pattern)
  • 访问者模式(Visitor Pattern)

面向对象设计原则

(1)开闭原则(Open Close Principle,OCP)

对外扩展开放,对修改关闭。

(2)里氏代换原则(Liskov Substitution Principle,LSP)

面向对象设计的基本原则之一。任何基类出现的地方,子类一定可以出现。该原则中,子类对父类的方法尽量不要重写或重载。

(3)依赖倒转原则(Dependence Inversion Principle,DIP)

针对接口编程,依赖于接口或抽象类不依赖于实现类。

(4)接口隔离原则(Interface Segregation Principle,ISP)

使用多个接口,比使用单个接口要好,降低类之间的耦合度。

(5)迪米特法则(最少知道原则,Law of Demeter,LoD)

实体之间尽量少的交互。

(6)合成复用原则(Composite Reuse Principle,CRP)

减少使用继承,多使用合成/聚合的方式。

(7)单一职责原则(Single Responsibility Principle,SRP)

参考文档:
从招式与内功谈起——设计模式概述(一)
从招式与内功谈起——设计模式概述(二)
GOF 面向对象 23 种设计模式详解
设计模式简介

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

推荐阅读更多精彩内容