首页 > 代码库 > My study notes —— 初始24种设计模式
My study notes —— 初始24种设计模式
摘要
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。
目录
- 设计概念
- 设计原则
- 四要素
- 基本模式
- 创建型
- 结构型
- 行为型
正文
设计概念
- Change:让代码富有弹性,能够应对需求的变化;
- DRY:消除冗余,让代码更精炼;
- KISS:让代码尽可能简单。
设计原则
为什么要提倡“Design Pattern呢?根本原因是为了代码复用,增加可维护性。那么怎么才能实现代码复用呢?
面向对象有几个原则
- 开闭原则(Open Closed Principle,OCP)
- 里氏代换原则(Liskov Substitution Principle,LSP)
- 依赖倒转原则(Dependency Inversion Principle,DIP)
- 接口隔离原则(Interface Segregation Principle,ISP)
- 合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP)
- 最小知识原则(Principle of Least Knowledge,PLK,也叫迪米特法则)
开闭原则具有理想主义的色彩,它是面向对象设计的终极目标。其他几条,则可以看做是开闭原则的实现方法。
设计模式就是实现了这些原则,从而达到了代码复用、增加可维护性的目的。
四要素
设计模式使人们可以更加简单方便地复用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。
1、模式名称(Pattern Name)
一个助记名,它用一两个词来描述模式的问题、解决方案和效果。命名一个新的模式增加了我们的设计词汇。设计模式允许我们在较高的抽象层次上进行设计。基于一个模式词汇表,我们自己以及同事之间就可以讨论模式并在编写文档时使用它们。模式名可以帮助我们思考,便于我们与其他人交流设计思想及设计结果。找到恰当的模式名也是我们设计模式编目工作的难点之一。
2、问题(Problem)
描述了应该在何时使用模式。它解释了设计问题和问题存在的前因后果,它可能描述了特定的设计问题,如怎样用对象表示算法等。也可能描述了导致不灵活设计的类或对象结构。有时候,问题部分会包括使用模式必须满足的一系列先决条件。
3、解决方案(Solution)
描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式。因为模式就像一个模板,可应用于多种不同场合,所以解决方案并不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象组合)来解决这个问题。
4、效果(Consequences)
描述了模式应用的效果及使用模式应权衡的问题。尽管我们描述设计决策时,并不总提到模式效果,但它们对于评价设计选择和理解使用模式的代价及好处具有重要意义。软件效果大多关注对时间和空间的衡量,它们也表述了语言和实现问题。因为复用是面向对象设计的要素之一,所以模式效果包括它对系统的灵活性、扩充性或可移植性的影响,显式地列出这些效果对理解和评价这些模式很有帮助。
基本模式
1、创建型:Creational(5+1)解决对象实例化问题
-
简单工厂模式(SimpleFactory )
-
工厂方法模式(FactoryMethod )
-
抽象工厂模式(AbstractFactory )
意图
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
适用性
一个系统要独立于它的产品的创建、组合和表示时。
一个系统要由多个产品系列中的一个来配置时。
当你要强调一系列相关的产品对象的设计以便进行联合使用时。
当你提供一个产品类库,而只想显示它们的接口而不是实现时。
-
单例模式(Singleton)
-
原型模式(Prototype )
-
建造者模式(Builder )
2、结构型:Structural(7)解决对象间行为关系问题
- 适配器模式(Adapter)
- 桥接模式(Bridge)
- 组合模式(Composite)
- 装饰模式(Decorator)
- 门面模式(Facade)
- 代理模式(Proxy)
- 享元模式(Flyweight)
3、行为型:Behavioral(11)解决对象间消息传递问题
- 命令模式(Command)
- 职责链模式(ChainOfResponsibility)
- 观察者模式(Observer)
- 中介者模式(Mediator)
- 备忘录模式(Memento)
- 迭代器模式(Iterator)
- 解释器模式(Interpreter)
- 状态模式(State)
- 策略模式(Strategy)
- 模版方法模式(TemplateMethod)
- 访问者模式(Visitor)