接口隔离的接口是什么
- 实例接口:在Java中申明的一个类,使用new关键字创建的对象。
- 类接口:Java中使用interface关键字定义的接口。
什么是接口隔离原则
建立单一接口,不需要庞大臃肿的接口,尽量细化接口,同时接口的方法尽量的少。
生活上的例子
我们出去的旅游的时候,肯定会去住酒店,那么在前台登记完成之后,你会拿到一把钥匙,这个钥匙只能打开你预定房间的门。假如前台给你的不是一把钥匙,而是一串酒店所有的钥匙,虽然你任能够打开自己预定的房间,但是你也可以打开其他的房间啊,这个时候,你是不是觉得可以干点坏事了呢?哈哈,不过现实是遵守接口隔离原则的,我只提供你能够访问的。
在使用第三方SDK的时候,他们提供给你接口,基本上都是符合这个原则,你只能够调用他提供给你的api,其他你是没有访问权限的(反射除外),当然如果你自己的写SDK的时候,也要遵守这个原则,防止使用SDK的开发者调用了本不应该开放的接口。
单一职责和接口隔离
单一职责原则讲的是实现时的职责分离,实现类需要实现该职责的所有方法。
接口隔离原则讲的是设计时的架构分离,限制实现类,避免实现类实现不需要实现的方法,同时也限制外部类访问的范围,但是必须符合单一职责原则。
举个例子:
//书的管理类
interface BookDbManager{
public Book queryBookByName(String name);
public void deleteBookByName(String name);
public Cursor queryBook(String sql);
public void deleteBook(String sql);
}
看看上面的接口,他只是处理Book管理的工作,可以说是符合单一职责原则的,加入限制有两种身份的人需要使用查询和删除Book的功能,一个是管理员,一个是普通用户,你会直接把BookDbManager都给他们使用吗?很显然是不行的,普通用户不见得会使用sql语句,当然也不能给他使用sql语句,因为这个里面有很大的风险,所以咱们必须根据身份重新定义新的接口。
//管理员访问的接口
interface AdminBookDbManager{
public Cursor queryBook(String sql);
public void deleteBook(String sql);
}
//用户访问的接口
interface UserBookDbManager{
public Book queryBookByName(String name);
public void deleteBookByName(String name);
}
通过接口隔离原则,有效的隔离不同用户身份访问的权限,并且符合单一职责原则。