设计模式01之设计原则
2013-11-04 10:59
330 查看
一、SRP单一职责原则(Single Responsibility Principle)
核心思想:系统中每一个对象都应该只有一个单独的职责,而所有对象所关注的就是自身职责的完成,即“高内聚,低耦合”;
就一个类而言,应该仅有一个引起它变化的原因。
注意:
1、一个合理的类,应该仅有一个引起它变化的原因,即单一职责。
2、在没有变化的征兆的情况下应用SRP或其他原则是不明智的.(不能滥用,要确保职责会发生变化)。
3、在需求实际发生的时候就应该应用SRP等原则重构代码。
4、使用测试驱动开发(Junit)会迫使我们分离不合理的代码。
5、若果测试不能分离,应该使用Facade或Proxy模式对代码进行重构。
二、LSP里氏替换原则(Liskov Substition Principle)
核心思想:在任何父类出现的地方都可以用它的子类代替。即子类必须实现父类的所有功能,同一个继承体系的对象应该具有共同的行为特征。
LSP描述了合理的继承应该具有以下四个方面:
1、子类必须完全实现父类的方法。
2、子类可以有自己的特性:即子类可以定义其他方法和属性。
3、覆盖或者实现父类方法时输入参数可以被放大,即 子类的参数应该为父类参数的父类。
4、覆盖或者实现父类方法时输出结果可以被缩小,即子类结果应该父类结果的子类。
三、DIP依赖注入原则(Dependence Inversion Principle)
核心思想:要依赖抽象,不能依赖具体实现。即在应用程序中,所有类如果使用或依赖其他类,应该依赖其抽象类,而不是具体实现类。
DIP要求开发人员应对接口进行编程,而不是对具体实现类进行编程。
实现方法:
1、通过构造函数传递依赖对象。
2、通过setter方法传递依赖对象。
3、接口声明实现依赖对象,即传递参数应为接口而不是具体实现。
四、ISP接口分离原则(Interface Segregation Principle)
核心思想:不应强迫客户依赖他们并不需要的接口,即一个接口不需要提供太多行为,一个接口应该只提供一个对外的功能。
注意:
1、接口尽可能小,保证一个接口只服务于一个子模块或者业务逻辑。
2、接口高内聚,接口申明的方法都与某个子模块相关,且为该模块所必须。
3、要有限度使用,不能使接口太小,使得接口数量急剧增多。
五、LOD迪米特原则(Low of Demeter)
核心思想:一个对象应该尽可能的对其他对象了解的少。降低耦合度。
注意:
1、在类的划分上,应该创建弱耦合的类。
2、每一个类都应该尽可能降低类的访问权限。
3、只要有可能,一个类应该设计成不变类(成员变量与方法不变)
4、一个对象对其他对象的引用应该尽可能少。
5、尽量降低类的访问权限。
6、谨慎使用序列化功能。
7、不要暴露类的成员变量,而是提供访问方法。
六、OCP开闭原则(Open for Extension,Closed for Modification)
核心思想:一个对象对扩展开放,对修改关闭,即类的改动使通过增加代码实现的,而不是通过修改代码。(使用抽象和多态)
将可变部分抽象出来,使抽象相对问题,实现部分多变。
核心思想:系统中每一个对象都应该只有一个单独的职责,而所有对象所关注的就是自身职责的完成,即“高内聚,低耦合”;
就一个类而言,应该仅有一个引起它变化的原因。
注意:
1、一个合理的类,应该仅有一个引起它变化的原因,即单一职责。
2、在没有变化的征兆的情况下应用SRP或其他原则是不明智的.(不能滥用,要确保职责会发生变化)。
3、在需求实际发生的时候就应该应用SRP等原则重构代码。
4、使用测试驱动开发(Junit)会迫使我们分离不合理的代码。
5、若果测试不能分离,应该使用Facade或Proxy模式对代码进行重构。
二、LSP里氏替换原则(Liskov Substition Principle)
核心思想:在任何父类出现的地方都可以用它的子类代替。即子类必须实现父类的所有功能,同一个继承体系的对象应该具有共同的行为特征。
LSP描述了合理的继承应该具有以下四个方面:
1、子类必须完全实现父类的方法。
2、子类可以有自己的特性:即子类可以定义其他方法和属性。
3、覆盖或者实现父类方法时输入参数可以被放大,即 子类的参数应该为父类参数的父类。
4、覆盖或者实现父类方法时输出结果可以被缩小,即子类结果应该父类结果的子类。
三、DIP依赖注入原则(Dependence Inversion Principle)
核心思想:要依赖抽象,不能依赖具体实现。即在应用程序中,所有类如果使用或依赖其他类,应该依赖其抽象类,而不是具体实现类。
DIP要求开发人员应对接口进行编程,而不是对具体实现类进行编程。
实现方法:
1、通过构造函数传递依赖对象。
2、通过setter方法传递依赖对象。
3、接口声明实现依赖对象,即传递参数应为接口而不是具体实现。
四、ISP接口分离原则(Interface Segregation Principle)
核心思想:不应强迫客户依赖他们并不需要的接口,即一个接口不需要提供太多行为,一个接口应该只提供一个对外的功能。
注意:
1、接口尽可能小,保证一个接口只服务于一个子模块或者业务逻辑。
2、接口高内聚,接口申明的方法都与某个子模块相关,且为该模块所必须。
3、要有限度使用,不能使接口太小,使得接口数量急剧增多。
五、LOD迪米特原则(Low of Demeter)
核心思想:一个对象应该尽可能的对其他对象了解的少。降低耦合度。
注意:
1、在类的划分上,应该创建弱耦合的类。
2、每一个类都应该尽可能降低类的访问权限。
3、只要有可能,一个类应该设计成不变类(成员变量与方法不变)
4、一个对象对其他对象的引用应该尽可能少。
5、尽量降低类的访问权限。
6、谨慎使用序列化功能。
7、不要暴露类的成员变量,而是提供访问方法。
六、OCP开闭原则(Open for Extension,Closed for Modification)
核心思想:一个对象对扩展开放,对修改关闭,即类的改动使通过增加代码实现的,而不是通过修改代码。(使用抽象和多态)
将可变部分抽象出来,使抽象相对问题,实现部分多变。
相关文章推荐
- 【架构师之路】-【01设计模式】-05设计原则之接口分离原则
- 【01】【设计模式几大原则】
- Java设计模式面试题 01 - 六大原则
- 【架构师之路】-【01设计模式】-02设计原则之单一职责原则
- 【架构师之路】-【01设计模式】-04设计原则之依赖倒转原则
- Java常用的设计模式01:设计模式的分类和原则
- 【架构师之路】-【01设计模式】-07设计原则之开闭原则
- 【架构师之路】-【01设计模式】-03设计原则之里式替换原则
- 设计模式心得(三) 单一职责原则
- 设计模式的6大原则
- 设计模式C++之二十(完结篇 & 面向对象原则)
- 设计模式六大原则(1):单一职责原则
- 设计模式6大原则之里氏替换原则(Liskov Substitution Principle)
- 设计模式之几个基本设计原则
- 设计模式——六大原则
- 设计模式原则
- 【开源】QuickPager 分页控件的内部结构,和OO原则与设计模式
- 设计模式 开放封闭原则 OCP
- 【设计模式】六大原则之一(单一职责与开闭原则)
- 设计模式学习之单一职责原则