感受设计演变过程中所蕴含的大智慧,体会乐于怒的程序人生中值得回味的一幕幕。这是《设计模式——菜鸟天书》——原则
设计模式(DesignPattern)是一套被反复使用多数人知晓的、经过匪类编目的、代码设计经验的总结。使用设计模式是为了可重用代码。让代码更容易被他人理解、保证代码可靠性、设计模式是软件工程的基石脉络,如同大厦的结构一样。
一:单一职能原则
大鸟定义:
就一个类而言,应该仅有一个引起它变化的原因。
旁白分析;
单一职责原则是实现高内聚、低耦合的指导方针,在很多代码重构手法中都能找到它的存在,它是最简单但又最难运用的原则,需要设计人员发现类的不同职责并将其分离,而发现类的多重职责需要设计人员具有较强的分析设计能力和相关重构经验。
:一个数据结构职责类和算法行为都放在一个User.我们应该把数据结构和行为分开。使用单一职责原则对user类进行重构。
二、开放-封闭原则
大鸟定义:
软件实体(类,模块,函数等)应该可以扩展,但是不可以修改。
旁白分析;
当软件实体因需求要变化时,尽量通过扩展已有软件实体,可以提供新的行为,以满足对软件的新的需求,而不是修改已有的代码,使变化中的软件有一定的适应性和灵活性。已有软件模块,特别是最重要的抽象层模块不能再修改,这使变化中的软件系统有一定的稳定性和延续性。
模板方法模式和观察者模式对视开放—封闭原则的极好体现。
三、里氏代换原则
大鸟定义:
子类型必须能够替换它们的父类型。
旁白分析:
在软件中如果能够使用基类对象,那么一定能够使用其子类对象。把基类都替换成它的子类,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类的话,那么它不一定能够使用基类。由于使用基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象
四:依赖倒转原则
大鸟定义:
a、高层模块不应该依赖底层模块。两个都应该依赖抽象
b、抽象不应该依赖细节。细节应该依赖抽象
旁白分析:
依赖倒转原则可以减少类间的耦合性,提高系统的稳定性,减低并运行开发引起的风险,提高代码的可读性和可维护性。
五、迪米特法则
大鸟定义:
如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用,如果其中一个类需要调用另一个类的某个方法的话,可以通过第三者转发这个调用
旁白分析:
- 在类的结构设计上,每个类都应当尽量降低成员的访问权限(包装好自己的Private状态)
- 强调类之间的松耦合
六、合成/聚合复用原则
大鸟定义:
聚合表示一种弱的“拥有”关系。合成是一种强的“拥有”关系,体现了严格的部分和整体的关系。
旁白分析:
尽量使用对象组合,而不是继承来达到复用的目的
旁白概述设计模式六大原则
设计原则名称 | 设计原则简介 | 重要性 |
单一职责原则 | 类的职责要单一,不能将太多的职责放在一个类中 | ★★★★☆ |
开放-封闭原则 | 软件实体对扩展是开放的,但对修改时关闭的,即在不修改一个软件实体的基础上去扩展其功能 | ★★★★★ |
里氏代换原则 | 在软件系统中,一个可以接受基类对象的地方必然可以接受一个子类对象 | ★★★★☆ |
依赖倒转原则 | 要正对抽象层编程,而不要针对具体类编程 | ★★★★★ |
迪米特法则 | 一个软件实体对其他实体的引用越少越好,或则说如果两个类不必彼此直接通信,呢么这两个类就不应当发生直接的相互作用,而是通过引入一个第三则发生简介交互 | ★★★☆☆ |
合成/聚合原则 | 尽量使用合成/聚合,尽量不要使用类继承 | ★★★☆☆ |