大话设计模式之设计原则

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

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

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

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

时间: 2024-12-30 19:30:46

大话设计模式之设计原则的相关文章

设计模式之设计原则

之前在做 .Net的时候就买了<Head First 设计模式>,也看了一下,由于看的也不深入,理解上不是太深,特别是没有动手敲一下,最近闲的蛋蛋疼,也想着跳槽,但觉得要沉住气,耐得住寂寞,不能跳槽太频繁,这样对职业生涯不好,所以趁着没事做,就试着把它再看一遍,书读百遍,其意自现嘛.当时在学校学软件工程课程时也讲过设计的基本原则,不过当时主要是理论也没实践过,回过头再温习一下,理解的可能会更深,温故知新嘛. 首先是软件设计的基本原则,这也是设计模式的目标: 单一职责原则(SRP),就一个类而言

学习设计模式六大设计原则之一

        在开始学习编程的时候,也看见过设计模式有关的书,那时感觉不到设计模式的重要性,感觉不用照样可以实现相应的功能,随着学习的深入对设计模式有了更深入的认识.没有设计模式只能盖个小土房,而设计模式是要盖高楼大厦的. 一.单一职责原则(Single Responsibility Principle, SRP);        英文解释:There should never be more thanone reason for a class to change.通俗点说就是一个类只干一件

学习设计模式六大设计原则之二

四.接口隔离原则(Interface Segregation Principle,ISP) 1.实例接口:在Java中使用关键字new产生一个实例,它是对一个类型事物的描述,它是一个接口.比如定义一个Person类,使用new实例化Person.Person p = new Person();其中Person就是p的一个接口. 2.类接口:由Java中的关键字Interface定义的接口. 接口隔离原则的定义: 1.Clients should not be forced to depend u

23、Python与设计模式--设计原则

一.六大设计原则 在法理学中,法律规则与法律原则都是法律规范的重要构成.但二者也会有些不同:法律规则是指采取一定的结构形式具体规定人们的法律权利.法律义务以及相应的法律后果的行为规范,内容比较明确,比如,交通法规中规定,禁止闯红灯:法律原则是指在一定法律体系中作为法律规则的指导思想,基本或本原的.综合的.稳定的原理和准则,内容上只包含"大方针",而并未有具体规则,比如,如果车上有马上临产的孕妇,闯红灯不会被处罚,这是符合重视生命的原则.设计模式与设计原则,基本符合规则与原则的关系,设计

Java程序员应当知道的10个面向对象设计原则

(设计原则)底线是永远追求高内聚.低耦合的编码或设计. Apache 和 Sun的开源代码是学习Java和OOPS设计原则的良好范例.它们向我们展示了,设计原则在Java编程中是如何使用的.Java JDK 使用了一些设计原则:BorderFactory类中的工厂模式.Runtime类中的单例模式.java.io 类中的装饰器模式.顺便说一句,如果您真的对Java编码原则感兴趣,请阅读Joshua Bloch 的Effective Java,他编写过Java API.我个人最喜欢的关于面向对象设

设计模式学习--面向对象的5条设计原则(转)

这几天重新看了一遍<大话设计模式>,发现果然有不同的感悟,而且自己也上网找了<敏捷软件开发-原则.模式与实践>一书来看,那本书的序言中有一段话我觉得很有道理:"美的东西比丑的东西创建起来更廉价,也更快捷."设计一个软件不关要追求代码的优雅问题,更关乎生产成本等.技术大师们在对软件架构的研究中经历了很长时间的摸索,从面向过程到面向对象,从设计原则到设计模式,总结了许多设计上的经典法则,而我们就只是站在巨人的肩膀上眺望远方而已. 从<大话设计模式>中,大

超越设计模式:深入探讨超越设计模式之外的设计原则

可复用面向对象软件的基础 -- 设计模式,以其可复用的设计初衷.精巧的逻辑思维被广大面向对象程序设计所追捧.但不少程序设计者却经常将思考的问题转换为遇到了什么场景就要用什么模式.这种八股文式的思维在某种程度上严重影响了程序设计的艺术性,并固化了程序设计者的思想,违背了设计模式的初衷.在本文中,作者总结了设计模式背后的核心思想,并提出了几个关键的设计原则,例如面向接口.封装变化.依赖倒置原则.只和朋友交谈等.程序设计者只需在程序设计时遵循这些原则,便会发现原来已经在使用某些设计模式了. 引题 GO

《设计模式》学习笔记1——七大面向对象设计原则

前言 根据这一次的学习计划,系统学习设计模式之前,先系统学习和理解设计原则.面向对象设计原则有如下几类. 原则一:单一职责原则 这是面向对象最简单的原则,对于定义,引用书中所说: 单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因 这里最重要的地方,我个人觉得应该是一个功能领域这一句. 设计的前提是思考,只有进行了思考才能谈得上设计,所以实际设计过程中最重要的还

连载:面向对象葵花宝典:思想、技巧与实践(39) - 设计原则 vs 设计模式

又是设计原则,又是设计模式,到底该用哪个呢? ============================================================================= 在"设计模型"一章中,我们提到设计原则和设计模式是互补的,设计原则和设计模式互补体现在:设计原则主要用于指导"类的定义"的设计,而设计模式主要用于指导"类的行为"的设计.   举一个很简单的例子:假设我们要设计一个图形类Shape,这个类既支持三角