设计模式一言以蔽之:设计模式就是人们对于实际编码错误以及编码经验的总结。详细说设计模式是一种最佳的软件编程实现,通常使用在计算机的高级语言之中,常常被有经验的面向对象的软件设计开发人员所使用。他是对软件编程中一系列具体问题的一般解决方案,是软件开发人员对长期开发实践总结的结果。而使用设计模式的目的也是为了提高代码可重用性、可读性和可靠性。
设计模式的分类:
设计模式 - 可复用的面向对象软件元素(Design Patterns - Elements of Reusable Object-Oriented Software)一书中将设计模式分为三种类型,共 23 种。
模式类型 | 包含模式 |
---|---|
创建型模式 | 单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。 |
结构型模式 | 适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 |
行为型模式 | 模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter 模式)、状态模式、策略模式、职责链模式(责任链模式)、访问者模式。 |
设计模式的七大原则
1. 开闭原则
开闭原则的中心思想是,类的修改应当保持对扩展开放,对修改关闭。即在程序的迭代扩展过程中应该合理的避免去直接修改原有的代码实现。转而言之就是优先使用接口和抽象类通过继承、扩展等方式来实现。
2. 里氏替换原则
里氏替换原则说的是,任何派生类可以出现的地方子类一定也可以出现,即实现子类的定义时,它应该完全拥有替代基类进行工作的能力。简而言之,就是:子类对外要具与父类一致的方法或接口。
3. 依赖倒置原则
依赖倒置原则说的是,针对接口编程,依赖抽象而不依赖具体。在具体的对象或类的依赖关系定义上,父类或者其他上层实现不应该依赖于子类或者其他下层实现,通过这样,来避免依赖关系的耦合。
4. 单一职责原则
单一职责原则说的是,一个类,只有一个引起它变化的原因,在具体的程序结构和依赖关系的定义上就是,要将类的功能职责充分理清,尽力减少类之间的耦合。避免对某个类进行修改时,牵一发动全身的连锁反应。
5. 接口隔离原则
接口隔离原则说的是,使用多个隔离的接口,比使用单个接口好,他的另一个意思就是尽可能的降低类之间的耦合度。也就是说在对外接口的定义上,要避免庞大而臃肿的接口,而是进行责任细化的区分,避免冗余的代码实现。这对于提高内聚,提升系统灵活度是非常有效果的。
6. 最少知识原则
最少知识原则说的是,一个对象应对其他对象有尽可能少的了解,在分配类的职责和建立依赖关系时,应该只关注于自身的功能实现和周围与之接触类的交互方式。避免类去考虑整个系统结构和处理流程,让类的职责清晰化,让系统的耦合度降低。
7. 合成复用原则
合成复用原则说的是,尽量使用合成/聚合的方式,而不是使用继承。即在扩展功能的时候,要优先考虑水平形式的新增类或方法,而不是通过继承去实现。也就是通过功能的组合实现类,而不是通过基础去实现新的功能。这样可以提高类的可扩展性,减少系统的层次。