从零开始重新认知设计模式
一直想学设计模式,也下过决心学习过一段时间,但总是由于各种原因被迫放弃了学习计划,老是断断续续的,导致到现在也没有走下来一遍,今天开始,从这个博客开始,重新拾起设计模式的学习计划!奥利给!
-
什么是设计模式?
设计模式,即Design Patterns,是指在软件设计中,被反复使用的一种代码设计经验。使用设计模式的目的是为了可重用代码,提高代码的可扩展性和可维护性。 -
为什么要使用设计模式?
根本原因还是软件开发要实现可维护、可扩展,就必须尽量服用代码,并且降低代码的耦合度。设计模式主要基于OOP编程提炼的,它基于六大原则。 -
设计模式的六大原则(也有人说是七大原则)
开闭原则(Open Close Principle)
开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,抑郁维护和升级。
里氏代换原则(Liskov Substitution Principle)
里氏代换原则是面向对象设计的基本原则之一。里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。LSP是集成复用的基石,只有当派生类可以替换掉基类,切软件单位的功能不受到影响时,基类才能真正被复用,而派生类也能够在基类的基础上附加新的行为。里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类于子类的集成关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。
依赖倒转原则(Dependence Inversion Principle)
这个原则是开闭原则的基础,具体内容:针对借口编程,依赖抽象而不依赖具体。
接口隔离原则(interface Segregation Principle)
这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。它还有另外一个意思是:降低类之间的耦合度。由此可实现设计模式就是从大型软件架构出发、便于升级和维护的软件设计思想,它强调低依赖,降低耦合。
迪米特法则/最少知道原则(Demeter Principle)
最少知道原则是指:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。
合成复用原则(Composite Reuse Principle)
合成复用原则是指:尽量使用合成/聚合的方式,而不是使用继承。
** 单一职责原则(Single Responsibility Principle)**
一个类或者一个方法只负责一项职责,尽量做到类的只有一个行为原因引起变化; -
设计模式的类型
根据设计模式的参考书Design Patterns - Elements Of Reusable Object-Orienter Software中所提到的,总共有23中设计模式。这些模式可以分为三大类:创建型模式,结构性模式,行为型模式。还有另一种设计模式:J2EE设计模式。
序号 | 模式类型 | 描述 | 模式 |
---|---|---|---|
1 | 创建型模式 | 这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用new运算符直接实例化对象。这使得程序在判断对某个给定实例需要创建那些对象时更加灵活。 | 工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式 |
2 | 结构性模式 | 这些设计模式关注类和对象的组合。集成的概念被用来组合接口和定义组合对象获得新功能的方式。 | 适配器模式、桥接模式、过滤器模式、组合模式、装饰器模式、外观模式、享元模式、代理模式 |
2 | 行为模式 | 这些设计模式特别关注对象之间的通信 | 责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、空对象模式、策略模式、模板模式、访问者模式 |
3 | J2EE模式 | 这些是设计模式特别关注表示层,这些模式是由sun Java center鉴定的 | MVC模式、业务代表模式、组合实体模式、数据访问对象模式、前端控制器模式、拦截顾虑器模式、服务定位器模式、传输对象模式 |
- 设计模式之间的关系
(注:该设计模式关系图不完善,后续可能更新)
根据上图的关系,我们可以看出以下几个模式是跟其他的模式关系相当密切的,也就是我们需要重点掌握的集中模式: - 组合模式(Composite)
- 迭代器模式(iterator)
- 抽象工厂模式(Abstract Factory)
- 享元模式(Flyweight)
- 访问者模式(Visitor)