`

OO的复用原则

阅读更多
最近在看java设计模式,想对OO的服用原则稍微终结下.
OO的复用设计原则有 :OCP,DIP,LSP,ISP,CARP,LoD。
充分利用这些原则可以提高软件的复用性

1.开闭原则 OCP(Open-Closed Princple):很简单,一句话:“Closed for Modification; Open for Extension”——“对变更关闭;对扩展开放”。如果从另外一个角度来讲就是"对可变性的封装原则(Principle of Encapsulation of Variation 或者EVP )"
EVP 意味着两点:
(1)一种可变性不应当散落在代码的很多角落里,应该设计在一个对象里面.
(2)一种可变性不应当与另一种可变性混合在一起.

2.里氏替换原则 LSP “Inheritance should ensure that any property proved about supertype objects also holds for subtype objects.”——“继承必须确保超类所拥有的性质在子类中仍然成立.
强调子类一定要严格拥有父类的所以特征,比如鸟类和企鹅,鸟类有个fly()方法,但企鹅不会飞.这将使得鸟类的特征在企鹅中不成立了,违反了LSP原则.

3.依赖倒置原则(Dependency Inversion Princple)DIP 
依赖倒置(Dependence Inversion Principle)原则讲的是:要依赖于抽象,不要依赖于具体。Spring 的IOC就是充分利用了这个原则.
简单的说,依赖倒置原则要求客户端依赖于抽象耦合。原则表述:
抽象不应当依赖于细节;细节应当依赖于抽象;
要针对接口编程,不针对实现编程。

4.ISP(Interface Segregation )接口隔离原则
接口隔离原则讲的就是同一个角色提供宽、窄不同的接口,以对付不同的客户端。比如同一台洗衣机,我可以专门用它来洗衣服,也可以将自己洗好的衣服甩干.而每个功能都是提供的不同的按扭,这些按扭就相当于我们讲的接口.

5.组合/聚合复用原则 CARP(Composition/Aggregation Princple) 合成/聚合原则将的是,要尽量使用合成/聚合,而不是使用继承关系达到复用的目的.它和LSP是相辅相成的,两者都是对OCP的实现的具体方法.

6.迪米特法则 LoD(Law of Demeter) 一个软件实体应该与尽可能少的实体发生相互作用,是一条通向OCP原则的道路.
分享到:
评论

相关推荐

    面向对象的设计原则 doc

    面向对象设计根本的指导原则是提高可维护性和可复用性。这些原则主要有:1. 开闭原则;2. 依赖倒转原则;3. 里氏代换原则;4. 合成/聚合复用原则;5. 迪米特原则;6. 接口隔离原则

    Head First 设计模式.rar

    你将学到为何(以及如何) 利用其他开发人员的经验与智慧。他们遭遇过相同的问题,也顺利地解决过这些 问题。本章结束前,我们会看看设计模式的用途与优点,再看一些关键的OO设计 ...往是代码复用,现在是经验复用。

    设计模式,软件开发者必读

    1.5.5 合成/聚合复用原则(CARP) 9 1.5.6 迪米特法则(LAW OF DEMETER LOD) 10 1.5.7 单一职责原则(SIMPLE RESPONSIBILITY PINCIPLE SRP) 10 创建型模式 11 2.1 SINGLETON单件模式 11 2.1.1 典型的SINGLETON类 11 ...

    初学JAVA-WEB开发的小项目

    在web层和dao层都提取了公共代码封装到BaseAction和BaseDao中,提高了代码的复用,同时按照OO设计原则,针对接口编程,而不是针对实现编程。 使用拦截器的方法对系统权限进行初步控制(后续可以采用Shiro框架进行...

    一套适合初学者的JAVA-WEB开发的小项目

    在web层和dao层都提取了公共代码封装到BaseAction和BaseDao中,提高了代码的复用性,同时遵循OO设计原则,接口是针对编程的,而不是针对实现编程的。 使用拦截器的方法对系统权限进行初步控制(后续可以采用Shiro...

    java初学者应该知道的一些知识

     OO设计根本的指导原则是提高可维护性和可复用性。这些原则主要有:  1. 开闭原则  一个软件实体应该对扩展开放,对修改关闭。  在设计一个模块的时候,就当使这个模块可以在不被修改的前提下被扩展。换言之,就...

    编程新手真言......

    8.36 设计模式复用与框架复用 201 第三部分 进阶: C,C++代码阅读与控制 201 第9章 语法与初级标准库 202 9.1 C++的基于过程设计 203 9.2 C++的基于对象设计: 模板与设计 203 9.3 面向对象设计 204 9.4 泛型开发与...

    重构到设计模式的经典案例,超完美详细(java源码)

    /* * 原始需求背景: * 网宿CDN要按月收取客户的服务费用,根据流量的大小、 * 服务的类型等,收取不同的费用,收费规则如下: * web应用:1000元/M ... * 现在,我们运用所学的OO原则和方法开始进行改写吧。 */

    asp.net知识库

    泛型技巧系列:用泛型打造可复用的抽象工厂 体验.net2.0的优雅(四):Provider、策略、控制反转和依赖注入 泛型最佳实践 asp.net 2.0下嵌套masterpage页的可视化编辑 C# 2.0与泛型 动态调用对象的属性和方法——...

Global site tag (gtag.js) - Google Analytics