1天之前,终究将设计模式的第2遍看完了。。在这两遍中,我又学到了很多知识。在之前看OOTV设计大赛时,总是提到面向对象设计的原则,这让我不明所以,直到看完全本书以后,才知道书中自有黄金屋。。这篇文章主要写的就是面向对象设计的6大原则。
根据上图,我们可以轻松地得出,面向对象设计是以高内聚、低耦合为设计核心,抽象为基础,封装、继承和多态为特点。综合面向对象的原则、基础和特点,我们总结出了它的6大原则。通过这6大原则,我们还可以演变出多种设计模式。。下面就写1下我对这6大原则的理解。。
依赖倒转
是面向对象的标志!用哪一种语言来编写程序不重要,重要的是程序中的依赖关系都是终止于抽象类或接口,这就是面向对象的设计。
定义
1、 高层模块不应当依赖低层模块,两个都应当依赖抽象
2、 抽象不应当依赖细节,细节应当依赖抽象
单1职责
如果1个类承当过量的职责,就等于把这些职责耦合在1起。1个职责的变化可能会削弱或抑制这个类完成其他职责的能力。所以,软件设计真正要做的,就是发现职责并把那些职责相互分离。
定义
就1个类而言,应当唯一1个引发它变化的缘由
迪米特
这个原则的条件是在类的结构设计上,每个类都应当尽可能下降成员的访问权限。其根本思想,是强调类之间的弱耦合。类之间的耦合越弱,越有益于复用,1个处在弱耦合的类被修改,不会对有关系的类造成较大波及。
定义
1、如果两个类没必要彼此直接通讯,那末这两个类就不应当产生直接的相互作用
2、如果其中1个类需要调用另外一个类的某1个方法,可以通过第3者转发这个调用。
合成/聚合复用
它的优点是,有助于保持每一个类被封装,并被集中在单个任务上。这样1来,就会下降继承所带来的强耦合,使程序不太可能增长为不可控制的庞然大物。
定义
尽可能使用合成/聚合,尽可能不要使用类继承
里氏代换
如果1个软件的实体使用的是1个父类的话,那末就1定适用于其子类,并且,发觉不出父类和子类对象的区分。更直白的说,就是在软件里面,把父类都替换成它的子类,程序的行动没有变化。
定义
子类型必须能够替换掉他们的父类型。
正是由于有了里氏代换原则,才使得下面的开放封闭成为可能。由于子类的可替换性才使得父类的模块在无需修改的情况下可以扩大。
开放封闭
不管模块是多么的“封闭”,都会存在1些没法对之封闭的变化。既然不可能完全封闭,设计人员就必须先猜想出最有可能产生的变化,然后构造抽象来隔离那些变化。
开放封闭原则是面向对象设计的重点所在。开发人员应当仅对程序中,显现出频繁变化的那些部份做出抽象。
定义
面对需求的更新,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。
小结
6大设计原则是面向对象技术的演变,可以理解为是对面向对象的继承。通过结合这6大原则,我们再对23种设计模式进行理解,那就事半功倍了。这又是米老师的思想,宏观把控,微观细化。米老师真是无处不在呀。。