接口隔离原则要求的是在一个模块应该只依赖它需要的接口,以保证接口的小纯洁。而且需要保证接口应该尽量小,即设计接口的时候应该让接口尽量细化,不要定义太臃肿的接口(比如接口中有很多不相干的逻辑的方法声明)
首先看看接口隔离原则的定义,有两种定义
第一种: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.(类间的依赖关系应该建立在最小的接口上)
而这里的接口,却不仅仅指的是通过interface关键字定义的接口,接口分为2种:
1、对象接口(Object Interface)
JAVA中声明的一个类,通过new关键字产生的一个实例,它是对一个类型的事物的描述,这也是一种接口。例如:
Phone phone = new Phone();这里的类Person就是实例phone的一个接口
2、类接口(Class Interface)
这种接口就是通过interface关键字定义的接口了
也就是说,接口隔离原则要求的是在一个模块应该只依赖它需要的接口,以保证接口的小纯洁。而且需要保证接口应该尽量小,即设计接口的时候应该让接口尽量细化,不要定义太臃肿的接口(比如接口中有很多不相干的逻辑的方法声明)。
接口隔离原则与单一职责原则有些相似,不过不同在于:单一职责原则要求的是类和接口职责单一,注重的是职责,是业务逻辑上的划分。而接口隔离原则要求的是接口的方法尽量少,尽量有用(针对一个模块)
在使用接口隔离原则的时候需要有一些规范:
1.接口尽量小
接口尽量小主要是为了保证一个接口只服务一个子模块或者业务逻辑
2.接口高内聚
接口高内聚是对内高度依赖,对外尽可能隔离。即一个接口内部的声明的方法相互之间都与某一个子模块相关,且是这个子模块必须的。
3.接口设计是有限度的
但是如果完全遵循接口隔离原则的话,会出现一个问题。即接口的设计力度会越来越小,这样就造成了接口数量剧增,系统复杂度一下子增加了,而这不是真实项目所需要的,所以在使用这个原则的时候还要在特定的项目,根据经验或者尝试判断,不过没有一个固定的标准。
举个例子
在春熙路上逛街,到处都是女的,有穿着丝袜的大妈(恶心一下),有文静的女生,有性感的辣妹,总之很多女的。然而当你对前面喊一声“美女,钱掉了”,估计前面连同大妈一起回头看看,以为在叫自己。如今美女这个词已经变得大众化了,反正跟女的打招呼就说美女。但是真正的美女是这样吗,男淫们心中的美女应该是这样的:身材好、长相好、气质佳。
IPrettyGirl.java:定义美女标准
-
-
public interface IPrettyGirl {
-
-
public void greatLooks();
-
-
public void greatFigure();
-
-
public void greatTemperament();
- }
PrettyGril.java:实现美女类
- public class PrettyGirl implements IPrettyGirl {
-
private String name;
-
-
public PrettyGirl(String name)
- {
-
this.name = name;
- }
-
-
@Override
-
public void greatFigure() {
-
System.out.println(name+":身材非常好");
- }
-
-
@Override
-
public void greatLooks() {
-
System.out.println(name+":长相非常好");
- }
-
-
@Override
-
public void greatTemperament() {
-
System.out.println(name+":气质非常好");
- }
-
- }
AMan:是个抽象类,抽象出一个男人来
- public abstract class AMan {
-
protected IPrettyGirl prettyGirl;
-
public AMan(IPrettyGirl prettyGirl)
- {
-
this.prettyGirl = prettyGirl;
- }
-
-
-
public abstract void findGirl();
- }
Man:
- public class Man extends AMan {
-
-
public Man(IPrettyGirl prettyGirl) {
-
super(prettyGirl);
- }
-
-
@Override
-
public void findGirl() {
-
System.out.println("美女在这里:----------------------");
-
super.prettyGirl.greatLooks();
-
super.prettyGirl.greatFigure();
-
super.prettyGirl.greatTemperament();
-
- }
-
- }
场景类,春熙路,帅哥开始寻找美女了
- public class ChunxiRoad {
-
public static void main(String args[])
- {
-
IPrettyGirl jiajia = new PrettyGirl("佳佳");
-
AMan man = new Man(jiajia);
- man.findGirl();
- }
- }
运行结果:
美女在这里:----------------------
佳佳:长相非常好
佳佳:身材非常好
佳佳:气质非常好
但是这里有个问题,接口划分的不是很清晰,比如有些男人认为某些女生长相好,身材好就是美女(而不管这个女的素质啥样,比如那些“压脉带”)。而某些女生虽然长相一般,身材也一般,但是气质很好,这就是某些宅男心目中的气质型美女,或者三者具备。所以需要把接口划分的再细一点以满足不同男人的审美观。
我们把接口分为两种:
好身材
- public interface IGreatBody {
-
-
public void greatLooks();
-
-
public void greatFigure();
- }
好气质
- public interface IGreatTemperament {
-
-
public void greatTemperament();
- }
然后我们就可以根据自己的需求来寻找自己心目中认为的美女啦,举个例子
上面的AMan和Man传递的接口变为IGreatBody
接下来,我们来到了--东京。看到了cang老师
- public class Tokyo {
-
public static void main(String args[])
- {
-
IGreatBody canglaoshi = new PrettyGirl("cang老师");
-
AMan man = new Man(canglaoshi);
- man.findGirl();
- }
- }
运行结果:
美女在这里:----------------------
cang老师:长相非常好
cang老师:身材非常好
原文链接:http://www.cnblogs.com/loulijun/archive/2012/03/07/2382247.html
分享到:
相关推荐
设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):...设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计模式六大原则(6):开闭原则
设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):...设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计模式六大原则(6):开闭原则
设计模式原则:单一职责原则,里氏替换,依赖倒转,接口隔离,开放关闭等等。
设计模式六大原则:单一职责模式、开闭原则、接口隔离原则、里氏替换原则、依赖倒置原则、迪米特法则
4、接口隔离原则(Interface Segregation Principle) 这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。还是一个降低类之间的耦合度的意思,从这儿我们看出,其实设计模式就是一个软件的设计思想,从...
详细介绍了设计模式六大原则,配有示例代码和图片,有开闭原则,单一职责原则,里氏替换原则,依赖倒置原则,接口隔离原则,迪米特法则等等。
php 设计模式六大原则 单一职责原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则 开闭原则 word版
1.单一职责原则: 不要存在多于一个导致类变更的原因 ...接口隔离原则告诉我们在设计接口的时候要精简单一;迪米特法则告诉我们要降低耦合。而开闭原则是总纲,他告诉我们要对扩展开放,对修改关闭。
4、接口隔离原则 5、合成/聚合复用原则 6、最少知识原则 (二)设计模式 1)工厂模式(Factory) 2)抽象工厂模式(Abstract Factory) 3)建造者模式(Builder) 4)原型模式(Prototype) 5)单例模式(Singleton...
策略模式[STRATEGY PATTERN] 代理模式[PROXY PATTERN] 单例模式[SINGLETON PATTERN] 多例模式[MULTITION PATTERN] ...六大设计原则:单一职责原则,里氏替换原则,依赖倒置原则,接口隔离原则,迪米特法则,开闭原则。
接口隔离原则ISP.zip
第一章设计模式与七大原则笔记,自己看网课写的,需要的关注拿一下吧,23种设计模式,背后其实是七大设计原则,也就是说,每个设计模式都归属于一个或多个设计原则7大设计原则:a单一职责原则 b里氏替换 c依赖倒置...
NULL 博文链接:https://lijie-insist.iteye.com/blog/2190970
9:接口隔离原则;10:合成/聚合复用原则;11:迪米特法原则;12:简单工厂模式;13:工厂方法模式;14:抽象工厂模式;15:单例模式;16:单例模式与MX记录;17:多例模式;18:序列健生成器与单例及多例模式;19:建筑模式;20:原始...
写代码的时候没处理好,启动文件,在简单工厂模式里 七大设计原则: 1、单一职责原则【SINGLE RESPONSIBILITY PRINCIPLE】:一个类负责一项职责....4、接口隔离原则【INTERFACE SEGREGATION PRINCIPLE】:建立单一接口
IOS设计模式的六大设计原则之接口隔离原则(ISP,Interface Segregation Principle)-附件资源
8接口隔离原则 9迪米特法则 10合成复用原则 11创建型模式的特点和分类 12单例模式 13原型模式 14工厂方法模式 15抽象工厂模式 16建造者模式 17结构型模式概述 18代理模式 19适配器模式 20桥接模式 21装饰模式 22外观...
1) 内容包括: 设计模式七大原则(单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特法则、合成复用)、UML类图(类的依赖、泛化和实现、类的关联、聚合和组合) 23种设计模式包括:创建型模式:单例模式(8种...