一直想总结一下设计模式,已经拖了大半年了,今天正式开始吧。
设计模式(Design pattern)是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。 设计模式代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。 项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。
设计模式(Design pattern)是由GOF 在他们的书---Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素)中首次提出。 GOF (四人帮,全拼Gang of Four),代表了四个人(Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides ),他们在1994年合著了上面说的这本书。 他们所提出的设计模式主要是基于以下的面向对象设计原则。
一般而言,一个模式有四个基本要素:
设计模式提供了一个标准的术语系统,且具体到特定的情景。例如,单例设计模式意味着使用单个对象,这样所有熟悉单例设计模式的开发人员都能使用单个对象,并且可以通过这种方式告诉对方,程序使用的是单例模式。
设计模式已经经历了很长一段时间的发展,他们提供了软件开发过程中面临的一般问题的最佳解决方案。学习这些模式有助于经验不足的开发人员通过一种简单会计的方式来学习软件设计,和快速和优雅的实现某一类场景的程序。
设计模式描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式。因为模式就像一个模板,可应用于多种不同场合,所以解决方案并不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象组合)来解决这个问题。
设计模式使人们可以更加简单方便地复用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。
在Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素)一共提到了23种设计模式,其实还有一些小型的或者子设计模式,比如简单工厂模式,再比如代理模式又分为远程代理、保护代理等等。
设计模式可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns)。
创建型模式:提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用新的运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 结构型模式:这类设计模式关注类和对象的组合,继承的概念被用来组合接口以及定义组合对象获得新功能的方式。 行为型模式:这类设计模式更关注对象之间的通信。 据说还有两类:并发性模式 和 线程池模式,这两种还没接触过?。
类型 | 包含的模式 |
---|---|
创建型模式 | 工厂方法模式(Factory Method Pattern)</br>抽象工厂模式(Abstract Factory Pattern)</br>单例模式(Singleton Pattern)</br>建造者模式(Builder Pattern)</br>原型模式(Prototype Pattern) |
结构型模式 | 适配器模式(Adapter Pattern)</br>桥接模式(Bridge Pattern)</br>组合模式(Composite Pattern)</br>装饰器模式(Decorator Pattern)</br>外观模式(Facade Pattern)</br>享元模式(Flyweight Pattern)</br>代理模式(Proxy Pattern) |
行为型模式 | 策略模式(Strategy Pattern)</br>模板方法模式(Template Method Pattern)</br>观察者模式(Observer Pattern)</br>迭代器模式(Iterator Pattern)</br>责任链模式(Chain of Responsibility Pattern)</br>命令模式(Command Pattern)</br>备忘录模式(Memento Pattern)</br>状态模式(State Pattern)</br>访问者模式(Visitor Pattern)</br>中介者模式(Mediator Pattern)</br>解释器模式(Interpreter Pattern) |
各种设计模式之间的关系
参考: 百度百科-设计模式 http://www.runoob.com/design-pattern/design-pattern-intro.html 书籍: 《Head First 设计模式》 《设计模式 - 可复用的面向对象软件元素》 《设计模式之禅》