设计模式原则 ######################################## 单一职责 **************************************** 单一职责原则的准确定义为:``就一个类而言,应该仅用一个引起它变化的原因`` 其本质上是为了满足 **低耦合** 的需求。若一个类承担的职责过多,就会导致其本身应有的职责被削弱,当变化发生时,已有的类可能会发生意想不到的破坏,导致类的设计变得脆弱。因此, **能引起类状态改变的动机应当不多于一种**。 开闭原则 **************************************** 开闭原则 :abbr:`OCP (The Open-Closeed Principle)` 的准确定义为:``对于拓展是开放的,对于更改是封闭的`` 开闭原则意味着当你得到新需求时,应当尽可能拓展已有代码,而不是修改已有代码。其主要可以通过一下几种方式: - 设计人员在设计时就猜测出最有可能发生变化的类,并对其进行抽象 - 在设计之初假设不会发生变化,一旦发生变化就通过重构将类似变化进行抽象,防止以后发生的同类变化 开闭原则需要注意: - 查明变化的时间越久,建立正确的抽象就越难 - 泛滥的抽象必定会导致系统的臃肿,因此,拒绝不成熟的抽象和抽象本身一样重要 里氏替换原则 **************************************** 里氏替换原则的准确定义为:``子类型必须能够替换掉它们的父类型``。 实质上指的是 is-a 关系,在 C++ 中意味着公有继承。简单来说就是:任何适用于父类的方法都可以用于其子类。[#]_ 依赖倒置原则 **************************************** 依赖倒置原则的准确定义为:``抽象不应该依赖于细节,细节应该依赖于抽象``。 简单来讲,就是应当针对接口编程,而不是针对实现编程。 接口隔离原则 **************************************** 其准确定义为:``类之间依赖关系应该建立在最小的接口上``。 简单来说,应当将复杂的系统拆分未多个简单接口。 迪米特法则 **************************************** 迪米特法则也叫最小知识原则,其准确定义为:``如果两个类不必彼此直接通信,那么这两个类不应当发生直接的相互作用,如果一个类调用另一个类的某个方法时,可以通过第三者转发此调用``。 其根本指导思想为降低类之间的耦合关系,方法为在类的设计中,尽量降低成员的访问权限。其途径有: - 尽量减少可以对类数据成员的访问的函数 耦合度越低,其可复用性越强。 .. seealso:: - `设计模式的六大原则 `_ - 大化设计模式 .. [#] Effective C++ 第三版:条款35