JAVA设计模式(二十六)——接口隔离原则

1、接口隔离原则

        好吧,老规矩,我们先看看英文定义是怎样的,如下:

Clients should not be forced to depend upon interfaces that they don't use.

这句话翻译过来是:客户端不应该强行依赖它不需要的接口。这里的接口不仅仅是指interface所定义的关键字,也可以指抽象类,抽象类具备接口的某一些功能特征。


2、另一种定义

        关于接口隔离原则的定义,如果说上面的定义还稍显得有些模糊,那么这里有另外一种定义,描述如下:

The dependency of one class to another one should depend on the smallest possible interface.

翻译过来,意思是:类间的依赖关系应该建立在最小的接口上。

        如何理解这句话呢?这句话意思是说:接口隔离原则要求一个模块应该只依赖它需要的接口,以保证接口的纯洁性(只依赖一个)。而且需要保证接口应该尽量小(方法少),不要定义太臃肿的接口。初略看起来,这个定义好像与单一原则有些类似,的确,两者都强调单一性,所不同的是,单一原则强调的是职责,表示的是业务逻辑,而接口隔离,要求的是方法尽可能少,接口尽可能的小,方法尽可能有用(没用就不要放这里)。


3、举例说明

        对于帅哥,不同的人可能有不同的定义。年轻的少女怀春,可能觉得高大、长相好是帅哥,等到毕业走上社会,可能觉得,有钱、有背景才是帅哥,其它的不管。有些就更加,要三者具备,高、富、帅三者都要才是帅哥。那么,这个时候,我们如果是一家婚姻中介,如何给这个女孩子找她所要求的帅哥呢?

        这时,我们需要定义一个帅哥接口,如果没有按照接口隔离原则,我们可能直接定义,高富帅为接口类型,如下:

/**
 * 帅哥这个接口
 * @author ljtyzhr
 *
 */
public interface Handsome {
	
	/**
	 * 有钱(富)
	 */
	public void haveMoney();
	
	/**
	 * 有身高(高)
	 */
	public void haveHeight();
	
	/**
	 * 有脸(帅)
	 */
	public void haveFace();
}


        这里,我们看看有什么问题呢,如果说帅哥要满足这三个条件,那么只是有钱就不能称之为帅哥,好吧,这下坑爹了,某个女生说,只要他有钱就算帅哥,这个该怎么办呢?我们总不能去改这个原始的接口吧,所以在定义接口的时候,应该尽可能细化。这里仅仅举出两个例子,如下拆分:

/**
 * 帅
 * @author ljtyzhr
 *
 */
public interface FaceMan {
	/**
	 * 有脸(帅)
	 */
	public void haveFace();
}
/**
 * 高
 * @author ljtyzhr
 *
 */
public interface HeightMan {
	
	/**
	 * 有身高(高)
	 */
	public void haveHeight();
}


4、隔离的意义

        从上面的示例可以看到,当我们将接口细化之后,就可以通过接口之间不同的组合,来满足不同女孩子对于帅哥的要求。比如,她想找一个又高又帅的,可以实现上面的两个接口,如果找三个都具备的,可以实现三者的接口。实际上真正的接口隔离,应该按照这样的方式去细化,这样可以降低程序的耦合性,增加内聚。

        给一个案例,如下:

/**
 * 这是又高又帅的人
 * 
 * @author ljtyzhr
 *
 */
public class HansomeMan implements FaceMan, HeightMan {

	@Override
	public void haveHeight() {
		// TODO Auto-generated method stub
		System.out.println("高高的帅哥");
	}

	@Override
	public void haveFace() {
		// TODO Auto-generated method stub
		System.out.println("帅帅的帅哥");
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值