设计模式学习(六)

接口分离原则

接口隔离原则: 客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。

未遵循接口隔离原则的设计:

遵循接口隔离原则的设计:

 

根据接口隔离原则拆分接口时,必须首先满足单一职责原则。

 

我们来举个例子来说明接口隔离原则到底对我们提出了什么要求。现在男生对小姑娘的称呼使用频率 最高的应该是“美女”了吧,我们今天来定义一下什么是美女:首先要面貌好看,其次是身材要窈窕,然 后要有气质,当然了,这三者各人的排列顺序不一样,总之要成为一名美女就必须具备:面貌、身材和气质,我们用类图类体现一下星探(当然,你也可以把你自己想想成星探)找美女的过程,看类图:

 

定义了一个 IPettyGirl 接口,声明所有的美女都应该有 goodLooking、niceFigure 和 greatTemperament,然后又定义了一个抽象类 AbstractSearcher,其作用就是搜索美女然后展示信息,只 要美女都是按照这个规范定义,Searcher(星探)就轻松的多了,我们先来看美女的定义:

public interface IPettyGirl {
//要有姣好的面孔
public void goodLooking();
//要有好身材
public void niceFigure();
//要有气质
public void greatTemperament();
}

美女就是这样的一个定义,各位色狼别把口水流到了键盘上,然后我们看美女的实现类:

public class PettyGirl implements IPettyGirl {
private String name;
//美女都有名字
public PettyGirl(String _name){
 this. name=_name;
 }
//脸蛋漂亮
public void goodLooking() {
 System. out.println(this. name + "---脸蛋很漂亮!");
 }
//气质要好
public void greatTemperament() {
 System. out.println(this. name + "---气质非常好!");
 }
//身材要好
public void niceFigure() {
 System. out.println(this. name + "---身材非常棒!");
 }
}

然后我们来看 AbstractSearcher 类,这个类一般就是指星探这个行业了,源代码如下:

public abstract class AbstractSearcher {
protected IPettyGirl pettyGirl;
public AbstractSearcher(IPettyGirl _pettyGirl){
 this.pettyGirl = _pettyGirl;
 }
//搜索美女,列出美女信息
public abstract void show();
}

场景中的两个角色美女和星探都已经完成了,我们再来写个场景类,展示一下我们的这个过程:

public class Client {
//搜索并展示美女信息
public static void main(String[] args) {
 //定义一个美女
 IPettyGirl yanYan = new PettyGirl(" 嫣嫣");
 AbstractSearcher searcher = new Searcher(yanYan);
 searcher.show();
 }
}
星探查找到美女,打印出美女的信息,源码如下:
public class Searcher extends AbstractSearcher{
public Searcher(IPettyGirl _pettyGirl){
 super(_pettyGirl);
 }
//展示美女的信息
public void show(){
 System. out.println("--------美女的信息如下: ---------------");
 //展示面容
 super. pettyGirl.goodLooking();
 //展示身材
super. pettyGirl.niceFigure();
 //展示气质
 super. pettyGirl.greatTemperament();
 }
}

 

运行结果如下:

--------美女的信息如下: ---------------
嫣嫣---脸蛋很漂亮!
嫣嫣---身材非常棒!
嫣嫣---气质非常好!

采用接口隔离原则:重新修改一下类图:

 

把原 IPettyGirl 接口拆分为两个接口,一种是外形美的美女 IGoodBodyGirl,这类美女的特点就是脸蛋和身材极棒,超一流,但是没有审美素质,比如随地吐痰,出口就是 KAO,CAO 之类的,文化程度比较低;另外一种是气质美的美女 IGreatTemperamentGirl,谈吐和修养都非常高。我们从一个比较臃肿的接口拆分成了两个专门的接口,灵活性提高了,可维护性也增加了,不管以后是要外形美的美女还是气质美的美女都可以轻松的通过 PettyGirl 定义。我们先看两种类型的美女接口:

public interface IGoodBodyGirl {
//要有姣好的面孔
public void goodLooking();
//要有好身材
public void niceFigure();
}
public interface IGreatTemperamentGirl {
//要有气质
public void greatTemperament();
}

实现类没有改变,只是实现类两个接口,源码如下:

public class PettyGirl implements IGoodBodyGirl,IGreatTemperamentGirl {
private String name;
//美女都有名字
public PettyGirl(String _name){
 this. name=_name;
 }
//脸蛋漂亮
public void goodLooking() {
 System. out.println(this. name + "---脸蛋很漂亮!");
 }
//气质要好
public void greatTemperament() {
 System. out.println(this. name + "---气质非常好!");
 }
//身材要好
public void niceFigure() {
 System. out.println(this. name + "---身材非常棒!");
 }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值