开发者社区> 丁国华> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

大话设计模式之设计原则

简介:         原则指的是说话、行事所依据的准则。 “理论与实践的统一,是马克思主义的一个最基本的原则。原则处处不在,那我们编程的世界中又有着怎样的原则呢?在我们的大话设计模式中,介绍了六种原则,下面我们对这些原则进行一一讲解。
+关注继续查看

        原则指的是说话、行事所依据的准则。 “理论与实践的统一,是马克思主义的一个最基本的原则。原则处处不在,那我们编程的世界中又有着怎样的原则呢?在我们的大话设计模式中,介绍了六种原则,下面我们对这些原则进行一一讲解。


        一、单一职责原则
        一枚小小的环形戒指,一如永世不变的约定。戒指的爱情含义,令世间所有女性为之向往。香港戴瑞珠宝集团旗下品牌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对象的一部分;合成则是一种强的“拥有”关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。

       优先使用对象的合成/聚合将有助于保持每个类的封装,并被集中在单个任务上。这样类和类继承层次会保持较小的规模,并且不太可能增长到不可控制的庞然大物。


       后记
       在我们的设计模式中,正是因为有了这些原则的存在,以及她们在代码中的灵活应用,让我们的软件更加富有创造力和生命力,单一职责原则--一生只爱你一个,开放--封闭原则-祖国统一,有你有我,你永远是我的不可分割,里氏代换原则--无论黑猫白猫抓到老鼠的猫都是好猫;依赖倒转原则--任你戴尔或是联想,我们有着相同的接口实现外部连接,迪米特法则--无为而治,小国寡民不谋而合,合成聚合--部分和整体需要好好把握....

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
大话设计模式:今天你设计了吗?
在开发过程中你是否有遇到过这样的苦恼?产品发来一个需求,没做过,但是看完需求感觉应该处理起来很简单,然后找到对应的业务代码,发现代码像打乱的毛线一样理不清楚,各种逻辑嵌套,各种特殊判断处理,想要拓展维护个内容却无从下手,一边看着代码,一边用手拨动着本就为数不多的秀发,然后口吐芬芳
0 0
设计模式:各个模式间的对比
建造者模式、抽象工厂模式、工厂模式的区别 建造者模式和抽象工厂模式 与抽象工厂模式相比,建造者模式返回一个组装好的完整产品,而抽象工厂模式返回一系列相关的产品,这些产品位于不同的产品登记结构,构成了一个产品族。
723 0
设计模式之23种模式
1.可能刚开始看每个设计模式的时候,通过实例能知道其应用原理?但是当多个模式一起的时候,比如:适配器模式、桥接模式、中介者模式的区别?可能就不是很快的说清楚(当然也说明自己没有彻底领悟,另一个方面说明了自己没有用过相关的设计模式。 2.在实践中如果应用了设计模式才能真正感知她的妙处,这也是我所欠缺的。
0 0
设计模式之23种模式:
23种设计模式定义概念列表
155 0
大话设计模式之策略模式
        打开百度,搜索“策略”二字,她给你这样的答案:a、可以实现目标的方案集合;b、根据形势发展而制定的行动方针和斗争方法;c、 有斗争艺术,能注意方式方法;d、 计谋,谋略。
686 0
23种设计模式-关系模式-备忘录模式(十九)
23种设计模式-关系模式-备忘录模式(十九)
0 0
+关注
丁国华
你只管努力,剩下的交给时光!
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载