常用设计模式
什么是设计模式
一套被反复使用、多数人知晓、经过分类编目的代码设计经验的总结,描述了在软件设计过程中一些不断重复发生的的问题以及解决方案。
其目的是为了提高代码的可重用性、可读性和可靠性
基本要素
- 模式名称
- 应用场景
- 解决方案
- 实际效果
面向对象设计原则
开闭原则
概述
当应用的需求改变时,在不修改应用原有代码的前提下可以扩展模块的功能。即对扩展开放,对修改关闭。
作用
- 软件测试时只需对扩展内容进行测试
- 提高代码的可复用性
- 提高代码的可维护性
里氏替换原则
概述
子类可以扩展父类的功能,但不能改变父类原有的功能。
作用
- 实现开闭原则的方式之一
- 克服了继承中重写父类方法造成可复用性变差的缺点
- 保证了动作的准确性。即类的扩展不会给已有系统引入新的错误
依赖倒置原则
概述
面向接口编程,不要面向实现编程。
作用
- 降低类间的耦合性
- 提高系统的稳定性
- 减少并行开发引起的风险
- 提高代码的可读性和可维护性
单一职责原则
概述
一个类应该有且仅有一个引起它变化的原因,否则该类就该被拆分。不该知道的不要知道,一个类应该保持对其它对象最少的了解
作用
- 降低类的复杂度,一个类只负责一项职能
- 提高类的可读性
- 提高可维护性
- 变更引起的风险降低
接口隔离原则
概述
要为各个类简历他们需要的专用接口,不要试图去建立一个很庞大的接口供所有类去调用。即一个接口只服务于一个子模块或业务逻辑。
作用
- 提高系统的内聚性
- 介绍工程中的代码冗余
迪米特法则
概述
若两个软件实体间无需直接通信,那么就不应该发生直接的相互调用。可以通过第三方转发该调用
作用
- 降低系统耦合度
- 提高模块的相对独立性
合成复用原则
概述
要求软件复用时,要尽量先使用组合或聚合等关联关系来实现,其次再考虑继承关系。即组合/聚合由于继承
作用
- 维持了类的封装性
- 降低了新旧类的耦合度
- 提高了复用的灵活性
分类
创建型
- 单例模式(Singleton)
- 原型模式(Prototype)
- 工厂方法(FactoryMethod)
- 抽象工厂(AbstractFactory)
- 静态工厂(Builder)
结构型
- 代理模式(Proxy)
- 适配器模式(Adapter)
- 桥接模式(Bridge)
- 装饰者模式(Decorator)
- 外观模式(Facade)
- 享元模式(Flyweight)
- 组合模式(Composite)
行为型
- 模板方法(Template Method)
- 策略模式(Strategy)
- 命令模式(Command)
- 职责链模式(Chain of Responsibility)
- 状态者模式(State)
- 观察者模式(Observer)
- 中介者模式(Mediator)
- 迭代器模式(Iterator)
- 访问者模式(Visitor)
- 备忘录模式(Memento)
- 解释器模式(Interpreter)