大话设计模式之设计原则
最后更新于:2022-04-01 06:32:54
原则指的是说话、行事所依据的准则。 “理论与实践的统一,是马克思主义的一个最基本的原则。原则处处不在,那我们编程的世界中又有着怎样的原则呢?在我们的大话设计模式中,介绍了六种原则,下面我们对这些原则进行一一讲解。
**一、单一职责原则**
一枚小小的环形戒指,一如永世不变的约定。戒指的爱情含义,令世间所有女性为之向往。香港戴瑞珠宝集团旗下品牌Darry Ring更将戒指的含义浪漫诠释,以一生仅有一枚的奇特规定,让每一枚戒指都有只有一个专属的承诺,唯一的一枚,是为此生挚爱保留。而这一切只源于Darry Ring对真爱的追求传播,见证更多真爱故事。香港戴瑞珠宝集团旗下极富盛名的求婚戒指品牌Darry Ring,以全球首创独树一帜绑定身份证定制钻戒形式,提出了“一生?唯一?真爱”的品牌理念。在此有最浪漫的购钻规定,每位男士凭借身份证仅可定制唯一一枚Darry Ring,赠予此生唯一挚爱。
Darry Ring品牌的创立初衷,旨在见证真爱,传播真爱理念。在浮华社会里,依然存留一方对纯净美好爱情的期待,而钻戒象征的坚贞与永恒便成为了最完美的信物。一生仅有一枚Darry Ring,因一生只爱一个人。真爱,是回归初心寻找到的一份难能可贵的美好。Darry Ring的可贵,在于传播了真爱唯一的理念,让拥有一枚Darry Ring的女人享有一份专属的幸福;并以此生唯一守护的安全感,庇护着每对恋人至真至美的爱情。一份真爱协议,承载的意义绝对不亚于一份结婚证书。签署下的是一生唯一的约定,名字将永远印记在协议上,不能修改、删除,需要一生信守承诺,呵护至极。
一如我们设计模式中的单一职责原则, 就一个类而言,应该仅有一个引起它变化的原因。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到破坏。软件真正要做的许多内容,就是发现职责并把那些职责相互分离。如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责,就应该考虑类的职责分离。和我们的学习思想不谋而合,专注,高效,所以成功......
**二、开放-封闭原则**
历史走过了整整数百年。香港和澳门的回归有着划时代的意义,充分显示了按照“一个国家、两种制度”实现中国统一大业指导思想具有强大的生命力。所以,“一国两制”方针将能推进祖国的和平统一事业,实现祖国的完全统一和民族的全面振兴。
恰似我们的软件,学过软工的小朋友都知道,软件需求总是变化的,世界上没有一个软件的是不变的,因此对软件设计人员来说,必须在不需要对原有系统进行修改的情况下,实现灵活的系统扩展。所谓开放封闭原则就是软件实体应该对扩展开发,而对修改封闭。开放封闭原则是所有面向对象原则的核心。软件设计本身所追求的目标就是封装变化,降低耦合,而开放封闭原则正是对这一目标的最直接体现。开放封闭原则主要体现在两个方面:对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。对修改封闭,意味着类一旦设计完成,就可以独立其工作,而不要对类尽任何修改。
学习是为了更好的生活,愿看到这篇文章的小朋友对痛苦关闭,对快乐开放......
**三、里氏代换原则**
1988年,由麻省理工学院一位姓里的女士(Liskov)提出来,举个简单的例子,“猫”是抽象的猫,而黑猫和白猫是猫的具体子类,一只黑猫则是“黑猫”类的实例,一只白猫则是“白猫”类的实例,如果一个方法适用于猫,那么必然适用于白猫或者是黑猫。如果有一个方法,捉老鼠,这就是历史代换原则,如果对每个类型T1的对象01,都有类型为T2的对象02,使得T1定义的所有程序P在所有对象01都代换成02时,程序P的行为没有变化,那么T2为T1的子类型。
在项目中,采用里氏替换原则时,尽量避免子类的“个性”,一旦子类有“个性”,这个子类和父类之间的关系就很难调和了,把子类当做父类使用,子类的“个性”被抹杀——委屈了点;把子类单独作为一个业务来使用,则会让代码间的耦合关系变得扑朔迷离——缺乏类替换的标准。
**四、依赖倒转原则**
所谓依赖倒置原则(Dependence Inversion Principle)就是要依赖于抽象,不要依赖于具体。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。
举个简单的例子,我们现在使用的电脑有各式的品牌,联想、神舟、戴尔等等,电脑需要用到鼠标,键盘;假设鼠标、键盘是针对某一个品牌的机器实现去做的话,那么我们将会遇到什么问题呢?那么我们市面上的键盘和鼠标就都是各式各样的,有一天鼠标,或键盘坏了,我们要怎么去买呢?难道记住这个电脑是什么品牌,什么型号,还有什么类型的去买么?这样会疯掉的。现在我们的电脑基本上都是使用USB接口的了,无论是键盘也好,鼠标也好,我们只要买USB接口的就可以使用了,同时,使用USB接口还可以有其他的扩展,只要实现了,这个接口,实现怎么样都没关系,例如,实现了USB接口的小台灯,只要接上USB线就可以照明了;又如实现了USB接口的充电器,接到我们的电脑上就可以充电了。
高层模块不应该依赖低层模块,两者都应该依赖其抽象又如何理解呢?这个问题也可以这么问:为什么要叫倒转?呢?在面向过程的开发中,为了使用常用的代码可以复用,一般都会把这些常用的代码写成许许多多函数的程序库,这样我们做新项目的时候,就去调用这些函数就可以了。
**五、迪米特法则**
迪米特法则(Law of Demeter)又叫做最少知识原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。《老子》云:"小国寡民……邻国相望,鸡犬之声相闻,民至老死,不相往来。"将被统治的对象隔离开来,使它们没有直接的通信,可以达到分化瓦解,继而分而治之的效果。迪米特法则与老子的"小国寡民"的统治之术不谋而合。
**六、合成/聚合复用原则**
聚合表示一种弱的“拥有”关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分;合成则是一种强的“拥有”关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。
优先使用对象的合成/聚合将有助于保持每个类的封装,并被集中在单个任务上。这样类和类继承层次会保持较小的规模,并且不太可能增长到不可控制的庞然大物。
**后记**
在我们的设计模式中,正是因为有了这些原则的存在,以及她们在代码中的灵活应用,让我们的软件更加富有创造力和生命力,单一职责原则--一生只爱你一个,开放--封闭原则-祖国统一,有你有我,你永远是我的不可分割,里氏代换原则--无论黑猫白猫抓到老鼠的猫都是好猫;依赖倒转原则--任你戴尔或是联想,我们有着相同的接口实现外部连接,迪米特法则--无为而治,小国寡民不谋而合,合成聚合--部分和整体需要好好把握....