- 浏览: 762325 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (241)
- 个人思考 (1)
- 数据库 (5)
- java基础 (32)
- 软件工程 (2)
- zk开源框架 (15)
- 设计模式 (25)
- javascript (12)
- css (9)
- UML (2)
- CMMI软件需求 (3)
- CMMI软件设计 (2)
- CMMI软件实现 (1)
- CMMI软件测试 (1)
- 正则表达式 (4)
- 系统日志配置 (4)
- 应用服务器 (1)
- spring (7)
- XML (6)
- java web (10)
- Ajax (3)
- RichFaces (14)
- 问题 (1)
- 评论文章 (2)
- fushioncharts (2)
- MAVN (4)
- jquery (26)
- Ext js学习 (2)
- 学习心得 (2)
- CSS兼容问题 (3)
- XSL-FOP (1)
- Quartz (0)
- OSGI (1)
- spring--security (6)
- apache tools (1)
- eclispe 小技巧 (2)
- Ant (1)
- 杂记 (1)
- spring3系列 (5)
- java cache (4)
- EffectiveJava (2)
- 代码重构 (0)
最新评论
-
psz6696:
可以说是超级简单的Demo了,可惜没有演示设值注入和构造注入两 ...
模拟spring中的ClassPathXmlApplicationContext类的实现 -
ziyourJava:
[flash=200,200][img][url][list] ...
spring security进级篇 V 自定义标签控制显示 -
ztw1122:
...
zk组件开发指南(目录) -
zjysuv:
容我说一句 在座的各位都是垃圾 spring 3.2以后的@C ...
三. spring mvc 异常统一处理 -
chengwu1201:
二 基于Spring的异常体系处理
接口隔离原则(Interface Segregation Principle)
1、接口隔离原则的定义:
第一种定义: Clients should not be forced to depend upon interfaces that they don't use.客户端不应该依赖它不需用的接口。
第二种定义:The dependency of one class to another one should depend on the smallest possible interface。一个类对另外一个类的依赖性应当是建立在最小的接口上的。
换句话说,使用多个专门的接口比使用单一的总接口总要好,建立单一接口,不要建立臃肿庞大的接口。一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染。不应当将几个不同的角色都交给同一个接口,而应当交给不同的接口。
2、接口污染定义:
所谓接口污染就是为接口添加了不必要的职责。在接口中加一个新方法只是为了给实现类带来好处,以减少类的数目。持续这样做,接口就被不断污染,变胖。实际上,类的数目根本不是什么问题,接口污染会带来维护和重用方面的问题。最常见的问题是我们为了重用被污染的接口,被迫实现并维护不必要的方法。因此,我们必须分离客户程序,分离客户程序就是分离接口。
3、分离接口的实现方法:
分离接口的方式一般分为两种:
1) 使用委托分离接口。(Separation through Delegation)
就把请求委托给别的接口的实现类来完成需要的职责,就是适配器模式(Adapter)。
2) 使用多重继承分离接口。(Separation through Multiple Inheritance。)
该方法通过实现多个接口来完成需要的职责。
两种方式各有优缺点,通常我们应该先考虑后一个方案,如果涉及到类型转换时则选择前一个方案。
4、实例
假如有一个Door,有lock,unlock功能,另外,可以在Door上安装一个Alarm而使其具有报警功能。用户可以选择一般的Door,也可以选择具有报警功能的Door。
要遵循ISP设计原则,方案如下:
1、在IAlarm接口定义alarm方法,在IDoor接口定义lock,unlock方法。接口之间无继承关系。CommonDoor实现IDoor接口。
public interface IDoor {
public void lock();
public void unlock();
}
public interface IAlarm {
public void alarm();
}
public class CommonDoor implements IDoor {
public void lock() {
System.out.println("CommonDoor is lock!");
}
public void unlock() {
System.out.println("CommonDoor is unlock!");
}
}
AlarmDoor有2种实现方案:
1)同时实现IDoor和IAlarm接口。
public class AlarmDoor implements IDoor, IAlarm {
public void lock() {
System.out.println("AlarmDoor is lock!");
}
public void unlock() {
System.out.println("AlarmDoor is unlock!");
}
public void alarm() {
System.out.println("AlarmDoor is alarm!");
}
}
2)继承CommonDoor,并实现Alarm接口。该方案是继承方式的Adapter设计模式的实现。
此种方案更具有实用性。
public class AlarmDoor extends CommonDoor implements IAlarm {
public void lock() {
super.lock();
}
public void unlock() {
super.unlock();
}
public void alarm() {
System.out.println("AlarmDoor is alarm!");
}
}
2、采用委让实现
public interface IDoor {
public void lock();
public void unlock();
}
public interface IAlarm {
public void lock();
public void unlock();
public void alarm();
}
public class CommonDoor implements IDoor {
public void lock() {
System.out.println("CommonDoor is lock!");
}
public void unlock() {
System.out.println("CommonDoor is unlock!");
}
}
采用委托的方式即采用对象适配器的方式
public class AlarmDoor implements IAlarm {
private CommonDoor commdoor=new CommonDoor();
public void lock() {
commdoor.lock();
}
public void unlock() {
commdoor.unlock();
}
public void alarm() {
System.out.println("AlarmDoor is alarm!");
}
}
5、小结
如果已经设计成了胖接口,可以使用适配器模式隔离它。像其他设计原则一样,接口隔离原则需要额外的时间和努力,并且会增加代码的复杂性,但是可以产生更灵活的设计。如果我们过度的使用它将会产生大量的包含单一方法的接口,所以需要根据经验并且识别出那些将来需要扩展的代码来使用它。
发表评论
-
面向对象设计原则-------总结
2015-07-14 10:55 0单一职能原则 ----- 设计类时,尽量功能单一,粒度合 ... -
MVC设计模式理解
2009-11-16 22:11 2078常常说MVC设计模式,今天抽空整理下,感觉模式这东 ... -
面向对象设计的原则---------迪米特原则
2009-10-15 21:15 3168迪米特原则(Law of Demeter) 1、迪米特原则的 ... -
面向对象设计的原则------依赖倒置原则
2009-10-11 18:27 3635依赖倒置原则(Dependence Inversion Pri ... -
面向对象设计的原则------里氏代换原则
2009-10-11 14:21 2637里氏代换原则(Liskov Sub ... -
面向对象设计的原则------开闭原则
2009-10-10 23:09 2469开闭原则(Open-Closed Prin ... -
面向对象设计的原则------单一职责原则
2009-10-09 20:36 3271学习设计模式,自然会涉及面向对象的设计原则,面向对 ... -
观察者模式
2009-08-04 22:14 1177gaojie -
组合模式-------树形模式
2009-08-03 20:42 22581、组合模式定义 ... -
命令模式
2009-08-02 14:06 18411、Commad模式是一种对象行为模式,它可以对发送者(se ... -
适配器和外观模式的区别
2009-08-01 18:23 1402ok -
适配器模式
2009-08-01 14:43 1188适配器模式通俗的说是将两个联系不密切的类或类与接口通过另一个类 ... -
门面模式(外观模式)
2009-07-29 22:49 14751、外观模式 为子系统的一组接口提供一个一致的界 ... -
简单工厂模式、代理模式、策略模式如此相似
2009-07-21 22:34 4113最近,一直在看设计模式,感觉简单工厂模式、代理模式、策略模式、 ... -
策略模式
2009-07-19 23:01 1359今天学习策略模式。策略模式是这个样子的。定义一个接 ... -
jdbcTemplate分页封装
2009-07-16 09:17 41401.JdbcTemplateExtend.java publi ... -
单例模式完全剖析
2009-07-07 21:01 1340概要 单例模式是最简单的设计模式之一,但是对于Jav ... -
DAO设计模式
2009-07-04 11:40 2233虽然DAO模式已经有了好多的成熟的框架,但它仍然是 ... -
工厂模式与DAO模式
2009-07-02 21:17 4417工厂模式是设计模式中较简单的模式,但在项目的开发过 ... -
动态代理模式
2009-06-30 22:25 15132.动态代理类 Java动态代理类位于Ja ...
相关推荐
- **接口隔离原则**(Interface Segregation Principle, ISP):客户端不应该被迫依赖它不使用的方法。 - **依赖倒置原则**(Dependency Inversion Principle, DIP):高层模块不应该依赖低层模块,二者都应该依赖其...
### 面向对象的设计原则——开放关闭原则详解 #### 一、背景介绍 面向对象编程(Object-Oriented Programming, OOP)是一种广泛应用于现代软件工程的方法论,旨在通过抽象、封装、继承和多态等特性提高软件的可复用...
4. **接口隔离原则(ISP)**:客户端不应该被迫依赖它不使用的方法。如果一个接口包含客户端不需要的方法,应该拆分为多个更小的接口。这有助于减少类之间的耦合。 5. **依赖倒置原则(DIP)**:高层次模块不应该...
4. 接口隔离原则(Interface Segregation Principle, ISP):不应该强迫客户端依赖于它们不需要的方法。将大的接口拆分为小的、更具体的接口,使得客户端只需关注所需的部分。 5. 依赖倒置原则(Dependency ...
面向对象 设计原则 单一职责原则--SRP 开放封闭原则--OCP Liskov替换原则--LSP 依赖倒置原则--DIP 接口隔离原则--ISP
面向对象设计原则总结 面向对象设计原则是软件设计中最重要的原则之一,它们是软件设计的基础和核心。面向对象设计原则的应用可以提高软件的开发效率、质量和可维护性。下面是七大面向对象设计原则的总结: 一、开...
对面向对象设计原则的总结,设计模式:“开-闭”原则,里氏代换原则、依赖倒转原则、合成/聚合复用原则、迪米特法则、接口隔离原则
5. **接口隔离原则(Interface Segregation Principle, ISP)** - **原则阐述**:客户端不应该被迫依赖于它不使用的方法。 - **实践意义**:通过精简接口设计,减少类之间的耦合,使系统更加易于理解和扩展。 6. ...
面向对象设计原则是Java开发中不可或缺的基础,它们指导着开发者创建可维护、可扩展和可复用的软件系统。本文将深入探讨其中的两个核心原则:“开-闭”原则(Open-Closed Principle, OCP)和里氏代换原则(Liskov ...
首先,我们来了解四个基础的面向对象设计原则:单一职责原则(SRP)、开放封闭原则(OCP)、里氏替换原则(LSP)和接口隔离原则(ISP)。 1. 单一职责原则(Single Responsibility Principle, SRP):一个类或模块...
4. **接口隔离原则(Interface Segregation Principle, ISP)** 这个原则建议将大的、臃肿的接口分解为更小、更具体的接口,确保客户端只使用他们真正需要的方法。这样做可以减少类之间的耦合度,提高灵活性。 5. ...
DIP)、接口隔离原则(Interface Segregation Principle, ISP)以及合成/聚合复用原则(Composite/Aggregate Reuse Principle, CARP)。 #### 1. 单一职责原则(Single Responsibility Principle, SRP) - **定义...
面向对象设计原则与设计模式是软件工程领域的重要组成部分,它们为构建高质量、可维护和可扩展的软件系统提供了指导方针。下面将详细阐述面向对象设计原则及其如何促进软件的复用,以及设计模式的概念。 ### 面向...
4. **接口隔离原则(ISP)**:客户端不应该强迫依赖它不使用的接口方法。接口应该被分解为更小、更具体的接口。 5. **依赖倒置原则(DIP)**:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖...
1面向对象6大原则--单一职责原则 2面向对象6大原则--里氏代换原则 3面向对象6大原则--开闭原则 4面向对象6大原则--依赖倒转原则 5面向对象6大原则--合成复用原则 6面向对象6大原则--接口隔离原则
面向对象设计原则概述 单一职责 开闭原则 里氏代换原则 依赖倒转原则 接口隔离原则 合成复用原则 迪米特法则
5. **接口隔离原则**(Interface Segregation Principle,ISP):客户端不应该被迫依赖它不使用的方法。 6. **迪米特法则**(Law of Demeter,LoD):一个对象应该对其他对象有最少的了解。 通过遵循这些原则,可以...
4. 接口隔离原则(ISP):客户端不应该被迫依赖它不使用的方法。接口应该尽可能小且具体,避免过大的接口导致不必要的耦合。 5. 依赖倒置原则(DIP):依赖于抽象,而不是依赖于具体实现。这样可以更容易地替换实现...