设计模式简介设计模式Design pattern代表了最佳的实践通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问设计模式于己于他人于系统都是多赢的设计模式使代码编制真正工程化设计模式是软件工程的基石如同大厦的一块块砖石一样。项目中合理地运用设计模式可以完美地解决很多问题每种模式在现实中都有相应的原理来与之对应每种模式都描述了一个在我们周围不断重复发生的问题以及该问题的核心解决方案这也是设计模式能被广泛应用的原因。在 1994 年由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名为Design Patterns - Elements of Reusable Object-Oriented Software中文译名设计模式 - 可复用的面向对象软件元素的书该书首次提到了软件开发中设计模式的概念。四位作者合称GOF四人帮全拼 Gang of Four。他们所提出的设计模式主要是基于以下的面向对象设计原则。对接口编程而不是对实现编程。优先使用对象组合而不是继承。设计模式的使用设计模式在软件开发中的两个主要用途。1.开发人员的共同平台设计模式提供了一个标准的术语系统且具体到特定的情景。例如单例设计模式意味着使用单个对象这样所有熟悉单例设计模式的开发人员都能使用单个对象并且可以通过这种方式告诉对方程序使用的是单例模式。2.最佳的实践设计模式已经经历了很长一段时间的发展它们提供了软件开发过程中面临的一般问题的最佳解决方案。学习这些模式有助于经验不足的开发人员通过一种简单快捷的方式来学习软件设计。设计模式的类型根据设计模式的参考书Design Patterns - Elements of Reusable Object-Oriented Software中文译名设计模式 - 可复用的面向对象软件元素中所提到的总共有 23 种设计模式。这些模式可以分为三大类创建型模式Creational Patterns、结构型模式Structural Patterns、行为型模式Behavioral Patterns。共计23种。序号模式 描述包括1创建型模式 5种这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。工厂模式Factory Pattern抽象工厂模式Abstract Factory Pattern单例模式Singleton Pattern建造者模式Builder Pattern原型模式Prototype Pattern2结构型模式 7种这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。适配器模式Adapter Pattern桥接模式Bridge Pattern过滤器模式Filter、Criteria Pattern组合模式Composite Pattern装饰器模式Decorator Pattern外观模式Facade Pattern享元模式Flyweight Pattern代理模式Proxy Pattern3行为型模式11种这些设计模式特别关注对象之间的通信。责任链模式Chain of Responsibility Pattern命令模式Command Pattern解释器模式Interpreter Pattern迭代器模式Iterator Pattern中介者模式Mediator Pattern备忘录模式Memento Pattern观察者模式Observer Pattern状态模式State Pattern策略模式Strategy Pattern模板模式Template Pattern访问者模式Visitor Pattern1、创建型模式对象实例化的模式创建型模式用于解耦对象的实例化过程。单例模式某个类智能有一个实例提供一个全局的访问点。工厂模式一个工厂类根据传入的参量决定创建出哪一种产品类的实例。抽象工厂模式创建相关或依赖对象的家族而无需明确指定具体类。建造者模式封装一个复杂对象的创建过程并可以按步骤构造。原型模式通过复制现有的实例来创建新的实例。2、结构型模式把类或对象结合在一起形成一个更大的结构。装饰器模式动态的给对象添加新的功能。代理模式为其它对象提供一个代理以便控制这个对象的访问。桥接模式将抽象部分和它的实现部分分离使它们都可以独立的变化。适配器模式将一个类的方法接口转换成客户希望的另一个接口。组合模式将对象组合成树形结构以表示“部分-整体”的层次结构。外观模式对外提供一个统一的方法来访问子系统中的一群接口。享元模式通过共享技术来有效的支持大量细粒度的对象。3、行为型模式类和对象如何交互及划分责任和算法。策略模式定义一系列算法把他们封装起来并且使它们可以相互替换。模板模式定义一个算法结构而将一些步骤延迟到子类实现。命令模式将命令请求封装为一个对象使得可以用不同的请求来进行参数化。迭代器模式一种遍历访问聚合对象中各个元素的方法不暴露该对象的内部结构。观察者模式对象间的一对多的依赖关系。中介者模式用一个中介对象来封装一系列的对象交互。备忘录模式在不破坏封装的前提下保持对象的内部状态。解释器模式给定一个语言定义它的文法的一种表示并定义一个解释器。状态模式允许一个对象在其对象内部状态改变时改变它的行为。责任链模式将请求的发送者和接收者解耦使的多个对象都有处理这个请求的机会。访问者模式不改变数据结构的前提下增加作用于一组对象元素的新功能。设计模式之间的关系