设计模式代表了面向对象的软件开发者最佳的实践,是软件开发者在软件开发过程中所遇到一些问题的优秀解决方案。这些解决方案是无数的软件开发者在大量的实践中总结出来的。
这个系列文章将会通过介绍和实例,带领你一步一步走进设计模式的大门。
前提条件
在学习设计模式之前,你最好对基本JAVA语法有一定的了解。
什么是GOF?
1994年四个作者Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides出版了一本书叫《Design Patterns - Elements of Reusable Object-Oriented Software》中文称之为《设计模式》,在这本书里首先引入了软件开发中设计模式的概念。这四位作者后来被一并称为"四人组"(Gang of Four (GOF))。在他们的介绍中,设计模式一般都遵循以下面向对象的原则:
- 合成复用原则(Composite Reuse Principle)
相较于类继承,更倾向使用对象组合。也就是说,尽量使用合成/聚合的方式,而不是类继承。 - 开闭原则(open close principle)
开放即指对扩展开放,对修改关闭 简而言之,就是扩展功能的时候应该尽量的不修改原有的代码。 - 里氏代换原则(liskov substitution principle)
可以简单理解为派生类与基类的替换关系,一旦程序中出现基类,那么这个基类若是被派生类替换了,也应该是合适的,并且对程序功能不受影响,该原则实际上是开闭原则的补充。 基类能真正复用,派生类也能够在基类的基础上增加新的行为。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范 - 依赖倒转原则(dependence inverse principle)
这个原则是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体 - 接口隔离原则
使用多个隔离的接口,比使用单个接口要好,该模式出发点在于大一点的软件设计架构,便于维护升级,降低耦合度 - 迪米特法则,又称最少知道原则(Demeter Principle)
一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立
设计模式的用途
在软件开发中,设计模式主要有两个作用:
开发者们公共的平台
设计模式提供了标准的术语。比如,单例模式表示要使用同一个对象,所以如果所有的开发者都熟悉单例模式的话,某些开发者在开发过程中使用了单例模式并告知另外的开发者,另外的开发者就会明白其中的含义。
最佳实践
经过长时间的发展和演进,设计模式已经是解决某些问题的最佳实践。学习这些模式对于没有经验的开发者快速学习软件设计大有裨益。
设计模式的类型
设计模式的参考书《Design Patterns - Elements of Reusable Object-Oriented Software》介绍了23种常用设计模式。这23种设计模式可以划分为4大类,创建型模式、结构型模式、行为型模式以及J2EE模式类。如下表所示:
序号 | 设计模式分类以及描述 |
---|---|
1 | 创造型模式,这种设计模式隐藏创建对象的创建逻辑,提供创建对象的接口,而非使用new关键字进行创建,这给了程序非常大的灵活性来决定到底创建哪一个对象。 |
2 | 结构型模式,这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式 |
3 | 行为型模式,这些设计模式关注对象之间的通信 |
4 | J2EE模式类,这些设计模式特别关注表示层。这些模式是由 Sun Java Center 鉴定的 |
本文翻译自设计模式概览
参考文章:
https://segmentfault.com/a/1190000016014855