名称 | 定义 |
---|---|
策略模式 | 封装了算法,为不同的算法提供统一的接口 |
单一职责 | 就一个类而言,应当仅有一个引起它变化的原因 |
开放封闭原则 | 类、模块、函数可以扩展,但是不可以修改 |
依赖倒转原则 | 抽象不应该依赖细节,细节应该依赖于抽象 |
里氏替换原则 | 子类型必须能够替换掉它们的父类型 |
装饰模式 | 动态的给对象添加额外的职责 |
代理模式 | 为其他对象提供一种代理以控制对这个对象的访问 |
策略模式
定义
它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变换不会影响到使用算法的客户
优点
- 策略模式定义了一系列算法,这些算法完成相同的工作,只是实现不同,策略模式可以以相同的方式调用所有算法,减少了算法和使用算法类之间的耦合。
- 易于进行单元测试
使用场景
测旅模式可以封装任何类型的规则,只要在分析过程中需要在不同时间应用的业务规则,就可以使用策略模式处理这种变化的可能性。
单一职责
定义
就一个类而言,应当仅有一个引起它变化的原因
为何需要单一职责
当一个类承担的职责太多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或抑制这个类完成其他职责的能力,这种耦合会导致脆弱的设计,当变化发生时,设计会遭到意想不到的破坏
何时需要职责分离
如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责
开放封闭原则
- 无论模块是多么的” 封闭”,都会存在一些无法对之封闭的变化,既然不可能完全封闭,设计人员必须对他设计的模块应该对那种变化封闭做出选择,他必须先猜测出最有可能发生的变化种类,然后构造抽象来隔离那么变化。
- 等到变化发生时立即采取行动
- 面对需求,对程序的改动是通过增加薪代码进行的,而不是更改现有的代码
- 开发人员应改仅对程序中频繁变化的那些部分做出抽象
依赖倒转原则
- 高层模块不应该依赖低层模块,两个都应该依赖抽象
- 抽象不应该依赖细节。细节应该依赖抽象
- 依赖倒转可以说是面向对象设计的标志,如果编写时考虑的都是如何针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是终止于抽象类或者接口,那就是面向对象的设计。
里氏替换原则
- 只有当子类可以替换掉父类,软件单位的功能不受影响时,父类才能真正被复用,而子类也能够在父类基础上增加新的行为。
- 由于子类的可替换性才使得使用父类类型的模块在无需修改的情况下可以扩展。
装饰模式 (Decorator)
动态地给对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。
* 装饰模式是为已有功能动态的添加更多功能的一种方式
* 当系统需要新的功能时,把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象。
* 装饰模式有效的将核心职责和装饰功能区分开,而且可以去除相关类中重复的装饰逻辑。
代理模式
为其他对象提供一种代理以控制对这个对象的访问。
* 远程代理,为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
* 虚拟代理,是根据需要创建开销很大的对象,通过它存放实例化需要很长时间的真实对象。
* 安全代理,用来控制真实对象访问时的权限。
* 智能指引,是指当调用真实对象时,代理处理另外一些事。