本文由@呆代待殆原创,转载请注明出处。

写在前面:所谓设计原则并不是一定要遵守的法则,只是一种建议,因为保持这些原则本身会有一定代价,若是这些代价超过了带来的好处就得不偿失了,所以一切还是以简单为准。

原则一:分离变与不变的部分。

定义:找出代码中会发生变化的部分,并将其和保持不变的部分分离。

作用:提升可维护性。将会变化的部分分离后,在以后的修改过程中就不会影响到其他不变的部分。

原则二:面向接口编程。

定义:面向接口编程,而不是面向某个实现。

作用:降低耦合。这里的接口有多个含义,并不仅仅只java中的interface,更准确的表达应该是面向超类编程。这样的话只要接口不发生改变,依赖接口的部分就不用发生改变,我们都知道,接口发生改变的可能性比接口的某个实现发生改变的可能性小很多。

原则三:开闭原则(The Open-Closed Principle)。

定义:类需要支持扩展而拒绝修改。

作用:增加可修改性和可维护性。

原则四:Dependency Inversion Principle(依赖倒置原则,之后简称DIP)。

定义:不要依赖实例(concrete classes)编程,依赖抽象(abstractions,指依赖抽象类和接口)。

关于倒置(inversion)的理解:通常我们的高层组件都会依赖于低层组件(指某个低层具体实例类),而DIP是不允许这样的,在DIP的指导下,我们会创建一个抽象类,让它处于高层组件与低层组件之间,打破这种依赖,这时不仅高层组件会依赖于这个抽象类,低层组件会依赖于这个所处位置比它高层的抽象类,所以会出现“倒置”这个说法。

此原则的几个指导方针(并不是一定要准守,只是在开发的时候当成一个参考而已)

1,不要有指向一个具体实例(concrete class)的引用。

2,不要有从具体实例(concrete class)派生出的类。

3,不要覆盖父类中已经实现的方法。

4,低层组件尽量都要有共同的接口或者抽象类。

与原则二的区别:比原则二更加严格,它增加了高层组件不能直接依赖低层组件这一条。

作用:降低耦合。只要定义好了高层组件和低层组件间的接口,他们的开发可以同步进行,在多人开发中的意义也很大。

原则五:最少至少原则(The Principle of Least Knowledge)[又称迪米特法则(Law of Demeter)]

定义:一个对象应该对其他对象保持最少的了解。

此原则的几个指导方针

1,只调用自己的成员方法。

2,只调用当做参数传递进来的对象的成员方法。

3,只调用自己的方法实例化的对象的成员方法。

4,只调用组合对象(成员变量的一部分)的成员方法。

作用:降低复杂度,提高可维护性。

原则六:好莱坞原则(The Hollywood Principle)

定义:别调用我们,我们会调用你。

作用:防止依赖腐败(dependency rot),当高层组件和低层组件组件相互依赖的时候,通常组件之间的关系会过于复杂,这时,就可以运用这个原则,拒绝低层组件调用高层组件,而是等待高层组件来调用低层组件,这样可以降低编程的复杂程度。

原则七: 单一责任原则(Single Responsibility)

定义:一个类只有一个引起变化的原因

作用:高内聚,提高可维护性。每个类只有一个职责,只有这个职责发生改变的时候这个类才应该被修改。

参考资料:《Head First 设计模式》

设计模式-设计原则(Design Principle)的更多相关文章

  1. 设计原则 Design Principle

    Design Principle设计原则 最近由于碰到要参与设计一个音频处理系统,有人提议用一个大的全局变量结构体来做状态信息交流的地方,引起了我对设计一个系统的思考,于是找到了如下资料,当然,关于这 ...

  2. Python设计模式——设计原则

    1.单一职责原则:每个类都只有一个职责,修改一个类的理由只有一个 2.开放-封闭远程(OCP):开放是指可拓展性好,封闭是指一旦一个类写好了,就尽量不要修改里面的代码,通过拓展(继承,重写等)来使旧的 ...

  3. JAVA设计模式-设计原则

    6大原则: 单一职责原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则 开闭原则 一.单一职责原则 定义:应该有且仅有一个原因引起类的变更 带来的好处: 类的复杂性降低,实现什么职责有清晰明确 ...

  4. Design Principle vs Design Pattern 设计原则 vs 设计模式

    Design Principle vs Design Pattern设计原则 vs 设计模式 来源:https://www.tutorialsteacher.com/articles/differen ...

  5. .NET 云原生架构师训练营(设计原则&&设计模式)--学习笔记

    目录 设计原则 设计模式 设计原则 DRY (Don't repeat yourself 不要重复) KISS (Keep it stupid simple 简单到傻子都能看懂) YAGNI (You ...

  6. IOS设计模式的六大设计原则之开放-关闭原则(OCP,Open-Close Principle)

    定义 一个软件实体(如类.模块.函数)应当对扩展开放,对修改关闭. 定义解读 在项目开发的时候,都不能指望需求是确定不变化的,大部分情况下,需求是变化的.那么如何应对需求变化的情况?这就是开放-关闭原 ...

  7. 设计原则:开-闭原则(Open-Closed Principle, OCP)

    开-闭原则就是软件实体应当对扩展开放,对修改关闭.(Software entities should be open for extension,but closed for modification ...

  8. 设计模式学习总结(一)——设计原则与UML统一建模语言

    一.概要 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结. 使用设计模式的目的:为了代码可重用性.让代码更容易被他人理解.保证代码可靠性. 设计 ...

  9. AngularJS_01之基础概述、设计原则及MVC设计模式

    1.AngularJS: 开源的JS框架,用来开发单一页面应用,以及数据操作频繁的场景:2.设计原则: ①YAGNI原则:You Aren't Gonna Need It! 不要写不需要的代码! ②K ...

随机推荐

  1. 【BZOJ 4556】[Tjoi2016&Heoi2016]字符串 SAM+二分+主席树

    这道题市面上就两种法:一种是SA+二分+主席树,一种是SAM+二分+主席树(有不少人打线段树合并???)(除此之外还有一种利用炒鸡水的数据的暴力SA,贼快.....)(当时学SA的时候没做这道题,现在 ...

  2. codevs 1191 线段树 区间更新(水)

    题目描述 Description 在一条数轴上有N个点,分别是1-N.一开始所有的点都被染成黑色.接着我们进行M次操作,第i次操作将[Li,Ri]这些点染成白色.请输出每个操作执行后剩余黑色点的个数. ...

  3. 安卓和html的互相调用

    1.写html和安卓布局 <Button android:id="@+id/btn" android:layout_width="wrap_content" ...

  4. 转:使用 Nginx Upload Module 实现上传文件功能

    普通网站在实现文件上传功能的时候,一般是使用Python,Java等后端程序实现,比较麻烦.Nginx有一个Upload模块,可以非常简单的实现文件上传功能.此模块的原理是先把用户上传的文件保存到临时 ...

  5. js删除一个父元素下面的所有子元素

    比如<div id="ok"><button tpye='button'>111111</button><p>22222</p ...

  6. 如何使用SDK在Ubuntu设备(包括仿真器和桌面)上运用应用程序

    简介 有三种运行通过SDK创建的应用程序的方式:在桌面上,在联网的Ubuntu设备上,以及在仿真器中.这些方式为互补性方式,因为各有优缺点.您首先将了解如何管理SDK的设备类型,以及哪一个类型用于测试 ...

  7. TLS回调函数

    @author: dlive TLS (Thread Local Storage 线程局部存储 )回调函数常用于反调试. TLS回调函数的调用运行要先于EP代码执行,该特性使它可以作为一种反调试技术使 ...

  8. (转)linux samb服务器配置

    1. 首先安装samba服务. 2. 配置防火墙(要先关闭) 3. 创建samba服务器用户:smbpasswd -a username     删除samba服务器用户:smbpasswd -x u ...

  9. html怎样让表格里面的内容居中

    html怎样让表格里面的内容居中 text-align:center; 在表格td中,有两个属性控制居中显示 align——表示左右居中——left,center,right valign——控制上下 ...

  10. mysql分页查询语法

    一.limit语法 SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset LIMIT 子句可以被用于强制 SELECT 语句返回指 ...