设计模式代表了最佳实践,通常被有经验的面向对象软件开发人员采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是许多软件开发人员经过长时间的反复试验总结出来的。
设计模式是代码设计经验的总结,被重复使用,被大多数人知道,被分类和编目。设计模式用于重用代码,使其他人更容易理解并确保代码的可靠性。毫无疑问,设计模式是对他人和系统的双赢。设计模式使代码编译真正工程化。设计模式是软件工程的基石,就像建筑中的砖块和石头。设计模式在项目中的合理应用可以完美解决很多问题。每个模式在现实中都有其对应的原理。每种模式都描述了我们身边反复出现的问题及其核心解决方案,这也是设计模式能够被广泛使用的原因。
什么是GOF(四人帮,四人帮)?
1994年,Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides共同出版了一本名为《设计模式-可重用面向对象软件的元素》(中文翻译:Design Patterns-可重用面向对象软件元素)的书,书中首次提到了软件开发中设计模式的概念。
这四个作者统称为GOF(四人帮,都是“四人帮”)。他们提出的设计模式主要基于以下面向对象的设计原则。
编程接口而不是实现。
使用对象组合优先于继承。
设计模式的使用
设计模式在软件开发中的两个主要用途。
开发人员的通用平台
设计模式提供了一个标准的术语系统,并且是针对特定情况的。例如,singleton设计模式意味着使用单个对象,这样所有熟悉singleton设计模式的开发人员都可以使用单个对象,并且可以通过这种方式告诉对方程序使用singleton模式。
最佳实践
设计模式已经发展了很长时间,它们为软件开发过程中的常见问题提供了最好的解决方案。这些学习模式帮助没有经验的开发人员以简单快捷的方式学习软件设计。
设计模式的类型
根据《设计模式-可重用面向对象软件元素》参考书(中文翻译:设计模式-可重用面向对象软件元素),总共有23种设计模式。这些模式可以分为三类:创造模式、结构模式和行为模式。当然,我们还会讨论另一种设计模式:J2EE设计模式。
序列号模式描述包括1234工厂模式。
抽象工厂(抽象工厂模式)
单一模式(单一模式)
构建器模式
原型模式。
创建模式这些设计模式提供了一种在创建对象时隐藏创建逻辑的方法,而不是用新的操作符直接实例化对象。这使得程序在判断给定实例需要创建哪些对象时更加灵活。
适配器模式
桥模式
过滤模式(过滤器、标准模式)
复合图案
装饰者模式。
外观图案
享受飞行重量模式。
代理模式
结构模式这些设计模式关注类和对象的组合。继承的概念用于组合接口,并定义如何组合对象以获得新的函数。
责任链模式
命令模式
解释器模式
迭代器模式
调解人模式
纪念图案(纪念图案)
观察者模式(观察者模式)
状态模式(状态模式)
空对象模式(空对象模式)
策略模式(策略模式)
模板模式(模板模式)
访问者模式(Visitor Pattern)
行为型模式
这些设计模式特别关注对象之间的通信。
MVC 模式(MVC Pattern)
业务代表模式(Business Delegate Pattern)
组合实体模式(Composite Entity Pattern)
数据访问对象模式(Data Access Object Pattern)
前端控制器模式(Front Controller Pattern)
拦截过滤器模式(Intercepting Filter Pattern)
服务定位器模式(Service Locator Pattern)
传输对象模式(Transfer Object Pattern)
J2EE 模式
这些设计模式特别关注表示层。这些模式是由 Sun Java Center 鉴定的。
下面用一个图片来整体描述一下设计模式之间的关系:
设计模式的六大原则
1、开闭原则(Open Close Principle)
开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。
2、勤恳的枕头代换原则(Liskov Substitution Principle)
勤恳的枕头代换原则是面向对象设计的基本原则之一。 勤恳的枕头代换原则中说,任何基类可以出现的地方,子类一定可以出现。LSP 是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。勤恳的枕头代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以勤恳的枕头代换原则是对实现抽象化的具体步骤的规范。
3、依赖倒转原则(Dependence Inversion Principle)
这个原则是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。
4、接口隔离原则(Interface Segregation Principle)
这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。它还有另外一个意思是:降低类之间的耦合度。由此可见,其实设计模式就是从大型软件架构出发、便于升级和维护的软件设计思想,它强调降低依赖,降低耦合。
5、迪米特法则,又称最少知道原则(Demeter Principle)
最少知道原则是指:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。
6、合成复用原则(Composite Reuse Principle)
合成复用原则是指:尽量使用合成/聚合的方式,而不是使用继承。
快三稳赚10大技巧
传输对象模式(Transfer Object Pattern)
J2EE 模式
这些设计模式特别关注表示层。这些模式是由 Sun Java Center 鉴定的。
下面用一个图片来整体描述一下设计模式之间的关系:
设计模式的六大原则
1、开闭原则(Open Close Principle)
开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。
2、勤恳的枕头代换原则(Liskov Substitution Principle)
勤恳的枕头代换原则是面向对象设计的基本原则之一。 勤恳的枕头代换原则中说,任何基类可以出现的地方,子类一定可以出现。LSP 是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。勤恳的枕头代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以勤恳的枕头代换原则是对实现抽象化的具体步骤的规范。
3、依赖倒转原则(Dependence Inversion Principle)
这个原则是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。
4、接口隔离原则(Interface Segregation Principle)
这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。它还有另外一个意思是:降低类之间的耦合度。由此可见,其实设计模式就是从大型软件架构出发、便于升级和维护的软件设计思想,它强调降低依赖,降低耦合。
5、迪米特法则,又称最少知道原则(Demeter Principle)
最少知道原则是指:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。
6、合成复用原则(Composite Reuse Principle)
合成复用原则是指:尽量使用合成/聚合的方式,而不是使用继承。