【设计模式】从菜鸟到大鸟之OOTV杯大赛评委

来源:互联网 发布:梧桐外设淘宝店 编辑:程序博客网 时间:2024/05/01 10:13

【设计模式】从菜鸟到大鸟之OOTV杯大赛评委

 

一、前言

 

“现在介绍本次大赛的评委,单一职责先生、开放封闭先生、依赖倒转先生、里氏代换女士、合成聚合复用女士、迪米特先生。主持人GOF说道”

 

         在《大话设计模式》最后一章中程杰先生很有魅力的给所有的模式以及原则进行了生动形象的从新编码,赋予了新的命名,让每一个模式更加的符合生活化。更加容易被我们理解,在这里也看出作者的良苦用心!为作者点一个赞!!

 

 

二、评委介绍

 

(1)单一职责先生

 

全名单一职责原则,所拥有的技能是就一个类而言,应该仅有一个引起它变化的原因[ASD]。可以将不同职责封装到不同的类或模块中。

 

举例说明:

 

电脑的显卡坏了,就不应该换CPU,因为职责明确。

 

(2)开放封闭先生

 

全名开放-封闭原则,所拥有的技能是软件实体(类、模块。函数等等)应该可以扩展,但是不可以修改[ASD]。

 

本先生有强烈的两面性:一面是对于扩展是开放的(Open for extension),另一面是对于更改是封闭的(Closed for modification)。

 

在设计的时候,时刻要考虑,尽量让这个类是足够好的,写好了就不要去修改了,如果新需求来,我们增加一些类就完事了,源代码能不动则不动。

 

好处:可维护、可拓展、可复用、灵活性好、对频繁变化的部分作出抽象。

 

举例说明:

 

内存不够只要插槽足够就可以了,硬盘不够可以用移动硬盘。

 

(3)依赖倒转先生

 

全名依赖倒转原则,所拥有的技能是A高层模块不应该以来低层模块。两个都应该依赖抽象。B.抽象不应该依赖细节。细节应该依赖抽象[ASD]。

 

不管高层模块还是低层模块,他们都要依赖于抽象,具体一点就是接口或抽象类,只要接口是稳定的,那么任何一个的更改都不用担心其他收到影响,这就使得无论高层模块还是低层模块都可以很容易的被复用。

 

举例说明:

 

PC里如果CPU、内存、硬盘都需要依赖具体的主板,主板一坏,所有的部件就都没有用了。这显然不合理,反过来,如果内存坏了,也不应该造成其他部件不能用。

 

(4)里氏代换女士

 

全名里氏代换原则(LSP),所拥有的技能是子类型必须能够替换掉他们的父类型。[ASD]

 

解释一下就是一个软件实体如果适用于一个父类的话,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别。也就是说在软件里面,把父类都替换成它的子类,程序的行为没有变化。

 

举例说明:

 

猫是继承动物类,我动物的身份拥有吃、喝、跑、叫等行为,当某一天,我们需要够、牛、羊也拥有类似的行为,由于他们都继承于动物,所以除了更改实例化的地方,程序其他处不需要更改。

 

(5)合成聚合复用女士


全名合成/聚合复用原则(CARP),技能是尽量使用合成/聚合,尽量不要使用类继承。[J&DP]

 

和在学习UML的时候的关系一样,大家可以参看:

 

好处是有助于保持每个类被封装,并被集中在单个任务上。这样类和类继承层次会保持较小的规模,并且不大可能增长为不可控制的庞大规模大物[DP]

 

 

(6)迪米特女士

 

全名是迪米特原则(LoD),技能是一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。使用的前提是在类的结构设计上,每一个类都应当尽量降低成员的访问权限[J&DP]

 

根本思想是强调了类之间的松耦合,类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。

 

 

三、共同合作

 

这么多的评委是如何让OOT共同运行的呢?

 

对这六个原则的遵守并不是是和否的问题,而是多和少的问题,也就是说,我们一般不会说有没有遵守,而是说遵守程度的多少。任何事都是过犹不及,设计模式的六个设计原则也是一样,制定这六个原则的目的并不是要我们刻板的遵守他们,而需要根据实际情况灵活运用。对他们的遵守程度只要在一个合理的范围内,就算是良好的设计。我们用一幅图来说明一下。

 

 

 

图中的每一条维度各代表一项原则,我们依据对这项原则的遵守程度在维度上画一个点,则如果对这项原则遵守的合理的话,这个点应该落在红色的同心圆内部;如果遵守的差,点将会在小圆内部;如果过度遵守,点将会落在大圆外部。一个良好的设计体现在图中,应该是六个顶点都在同心圆中的六边形。

 

 

 

 

 

在上图中,设计1、设计2属于良好的设计,他们对六项原则的遵守程度都在合理的范围内;设计3、设计4设计虽然有些不足,但也基本可以接受;设计5则严重不足,对各项原则都没有很好的遵守;而设计6则遵守过渡了,设计5和设计6都是迫切需要重构的设计。

 

 

四、小结

 

通过学习这几个原则,真的给我一种思想观念:我要去利用这几个规则。我们一般不会说有没有遵守,而是说遵守程度的多少。

0 0
原创粉丝点击