面向对象六大原则

参考自:http://www.cnblogs.com/dolphin0520/p/3919839.html

【1.单一职责原则】

一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。

一个类不能太“累”!在软件系统中,一个类(大到模块,小到方法)承担的职责越多,它被复用的可能性就越小

【2.开闭原则】

对扩展开放,对修改关闭

解耦:初始化反射解耦

      事件系统解耦

         策略模式、面向借口编程解耦

【3.依赖倒置原则】

依赖注入DI: http://www.cnblogs.com/zhangchenliang/archive/2013/01/08/2850726.html(十分好的文章)

在实现依赖倒转原则时,我们需要针对抽象层编程,而将具体类的对象通过依赖注入(DependencyInjection, DI)的方式注入到其他对象中,依赖注入是指当一个对象要与其他对象发生依赖关系时,通过抽象来注入所依赖的对象。常用的注入方式有三种,分别是:构造注入,setter注入(Setter注入)和接口注入

接口注入:策略模式、面向接口编程

【4.接口隔离原则】

使用多个专门的接口,而不使用单一的总接口

【5.里氏替换原则】

在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立

(父类可以换成子类 对象,不报错)

【6.迪米特法则】

<MVP框架就是应用了这点,就是中间垫了一个层 >

如果一个系统符合迪米特法则,那么当其中某一个模块发生修改时,就会尽量少地影响其他模块,扩展会相对容易,这是对软件实体之间通信的限制,迪米特法则要求限制软件实体之间通信的宽度和深度。迪米特法则可降低系统的耦合度,使类与类之间保持松散的耦合关系。

迪米特法则还有几种定义形式,包括不要和“陌生人”说话只与你的直接朋友通信等,在迪米特法则中,对于一个对象,其朋友包括以下几类:

(1) 当前对象本身(this);

(2) 以参数形式传入到当前对象方法中的对象;

(3) 当前对象的成员对象;

(4) 如果当前对象的成员对象是一个集合,那么集合中的元素也都是朋友;

(5) 当前对象所创建的对象。

任何一个对象,如果满足上面的条件之一,就是当前对象的“朋友”,否则就是“陌生人”。在应用迪米特法则时,一个对象只能与直接朋友发生交互,不要与“陌生人”发生直接交互,这样做可以降低系统的耦合度,一个对象的改变不会给太多其他对象带来影响。

迪米特法则要求我们在设计系统时,应该尽量减少对象之间的交互,如果两个对象之间不必彼此直接通信,那么这两个对象就不应当发生任何直接的相互作用,如果其中的一个对象需要调用另一个对象的某一个方法的话,可以通过第三者转发这个调用。简言之,就是通过引入一个合理的第三者来降低现有对象之间的耦合度

在将迪米特法则运用到系统设计中时,要注意下面的几点:在类的划分上,应当尽量创建松耦合的类,类之间的耦合度越低,就越有利于复用,一个处在松耦合中的类一旦被修改,不会对关联的类造成太大波及在类的结构设计上,每一个类都应当尽量降低其成员变量和成员函数的访问权限在类的设计上,只要有可能,一个类型应当设计成不变类在对其他类的引用上,一个对象对其他对象的引用应当降到最低

时间: 2024-12-19 18:04:06

面向对象六大原则的相关文章

公共技术点之面向对象六大原则

概述 在工作初期,我们可能会经常会有这样的感觉,自己的代码接口设计混乱.代码耦合较为严重.一个类的代码过多等等,自己回头看的时候都觉得汗颜.再看那些知名的开源库,它们大多有着整洁的代码.清晰简单的接口.职责单一的类,这个时候我们通常会捶胸顿足而感叹:什么时候老夫才能写出这样的代码! 在做开发的这些年中,我渐渐的感觉到,其实国内的一些初.中级工程师写的东西不规范或者说不够清晰的原因是缺乏一些指导原则.他们手中挥舞着面向对象的大旗,写出来的东西却充斥着面向过程的气味.也许是他们不知道有这些原则,也许

Java设计模式之——面向对象六大原则

面向对象六大原则: 设计模式六大原则(1):单一职责原则 设计模式六大原则(2):开闭原则 设计模式六大原则(3):里氏替换原则 设计模式六大原则(4):依赖倒置原则 设计模式六大原则(5):接口隔离原则 设计模式六大原则(6):迪米特原则 设计模式六大原则(1):单一职责原则 单一职责原则的英文名称是 Single Responsibility Principle,缩写为 SRP.SRP 的定义是:就一个类而言,应该仅有一个引起它变化的原因.简单来说,一个类中应该是一组相关性很高的函数.数据的

工程师的基本修养 — 面向对象六大原则介绍

首先简单说下面向对象.软件在机器中运行,用来解决实际问题,解决一个问题一定有先后顺序,只要把问题拆解开,然后一件一件的顺序完成,问题大都可以解决,这就是面向过程的编程. 但是对于更加复杂的模型,如果继续使用面向过程的编程,一些程序就会变得不容易控制了.为了更好解决问题,需要对这个世界进行抽象,把一个任务.一个程序拆分成更容易控制和理解的小块,小块间定义好使用原则等,然后在大块中,用逻辑把所有模块都运行起来,有相同特性的模块可以通过继承去更好的管理,还可以定义一些接口约束,让模块都具有同样的外观,

面向对象六大原则-含具体实例

1.优化代码的第一步——单一职责原则 单一职责原则的英文名称是Single Responsibility Principle,简称SRP.它的定义是:就一个类而言,应该仅有一个引起它变化的原因.简单来说,一个类中应该是一组相关性很高的函数.数据的封装.就像秦小波老师在<设计模式之禅>中说的:“这是一个备受争议却又及其重要的原则.只要你想和别人争执.怄气或者是吵架,这个原则是屡试不爽的”.因为单一职责的划分界限并不是总是那么清晰,很多时候都是需要靠个人经验来界定.当然,最大的问题就是对职责的定义

Java面向对象六大原则

引自百度知道: 1) Open-Close Principle(OCP),开-闭原则,讲的是设计要对扩展有好的支持,而对修改要严格限制.这是最重要也是最为抽象的原则,基本上我们所说的Reusable Software既是基于此原则而开发的.其他的原则也是对它的实现提供了路径. 2) Liskov Substituition Principle(LSP),里氏替换原则,很严格的原则,规则是"子类必须能够替换基类,否则不应当设计为其子类."也就是说,子类只能去扩展基类,而不是隐藏或覆盖基类

0608pm单例模式and面向对象的六大原则

//把类控制住,不让外界造她的对象class DA{ public $name; static private $dx;//存放对象的变量 //将构造变为私有,外界没法造对象 private function __construct() { } //提供一个造对象的方法 static function CreateDX() { if(empty(self::$dx))//判断是否为空 { self::$dx=new DA();//如果是空的就new一个对象放在dx里面 } return self

【设计模式】 面向对象六大设计原则

面向对象设计的六大原则 : 单一职责原则, 里氏替换原则, 依赖倒置原则, 接口隔离原则, 迪米特法则, 开闭原则; 一. 单一职责原则 1. 单一职责简介 单一职责定义 : 有且只有一个原因引起类的变化, 一个接口 或者 类 只有一个职责; 单一职责的好处 : -- 复杂性 : 降低类的复杂性, 对类或接口的职责有清晰明确定义; -- 可读性 : 提高可读性; -- 维护 : 提高可维护性; -- 变更风险 : 降低变更引起的风险, 接口改变只影响相应的实现类, 不影响其他类; 2. 单一职责

面向对象的六大原则

现在编程的主流语言基本上都是面向对象的.如C#,C++,JAVA.我们在使用时,已经构造了一个个的类.但是往往由于我们在类内部或外部的设计上存在种种问题,导致尽管是面向对象的语言,却是面向过程的逻辑,甚至维护起来异常困难.每次增加或修改功能都要改动很多的代码,如履薄冰.而面向对象的六大原则主要的目的,就是我们如何设计类,更能很好的利用面向对象的特性. 1)单一职责原则 一个类永远只有一个职责. 一套软件就像是一个团队,每个类就是团队中的一个成员.团队如果想稳定的发展.这些类就要各司其职,分工明确

面向对象的六大原则(推荐)

要把软件做得非常灵活又要便于维护是一个很困难的事情.灵活的软件他的结构就复杂,维护起来就困难.有得必有失,关键就在于如何处理这两者,使得大于失.软件的设计开发应遵循以下六大原则: 1.   OCP 全称:“Open-Closed Principle” 开放-封闭原则 说明:对扩展开放,对修改关闭. 优点:按照OCP原则设计出来的系统,降低了程序各部分之间的耦合性,其适应性.灵活性.稳定性都比较好.当已有软件系统需要增加新的功能时,不需要对作为系统基础的抽象层进行修改,只需要在原有基础上附加新的模