3.4 接口隔离原则(ISP)
接口隔离原则:Interface Segregation Principle,简称ISP
3.4.1 概述
客户端测试类不应该被迫依靠于它不使用的方法;一个类对另一个类的依靠应该建立在最小的接口上。
3.4.2 案列
面看一个例子来理解接口隔离原则:
【例】安全门案例
需求:创建一个学校品牌的安全门,该安全门具有防火、防水、防盗的功能。可以将防火,防水,防盗功能提取成一个接口,形成一套规范。类图如下:
- // 防盗门
- public interface SafetyDoor {
- //防盗功能
- public abstract void antiTheft();
- // 防火功能
- public abstract void fireproof();
- // 防水功能
- public abstract void waterproof();
- }
- ==========================================================
- //学校防盗门类 实现防盗门接口
- public class SchoolDoor implements SafetyDoor {
- @Override
- public void antiTheft() {
- System.out.println("防盗");
- }
- @Override
- public void fireproof() {
- System.out.println("防火");
- }
- @Override
- public void waterproof() {
- System.out.println("防水");
- }
- }
- ============================================================
- public class ClientTest {
- public static void main(String[] args) {
- // 创建学校防盗门对象
- SchoolDoor schoolDoor = new SchoolDoor();
- // 调用方法实现防盗门的功能
- schoolDoor.antiTheft();
- schoolDoor.waterproof();
- schoolDoor.fireproof();
- }
- }
复制代码 上述代码看似实现了需求的功能,但是假如参加新增一个家庭品牌的安全门,有防盗功能和防火功能,此时假如再界说一个家庭安全门类去实现安全门的接口会造立室庭安全门被迫去实现防水功能,这就违反了接口隔离原则。
根据接口隔离原则,改进如下:

- // 防盗接口
- public interface AntiTheft {
- public abstract void antiTheft();
- }
- ===========================================================
- // 防火接口
- public interface Fireproof {
- public abstract void fireproof();
- }
- ===========================================================
- // 防水接口
- public interface Waterproof {
- public abstract void waterproof();
- }
- ==========================================================
- //创建学校防盗门,实现该有功能的接口
- nmpublic class SchoolDoor implements AntiTheft,Fireproof,Waterproof{
- @Override
- public void antiTheft() {
- System.out.println("防盗");
- }
- @Override
- public void fireproof() {
- System.out.println("防火");
- }
- @Override
- public void waterproof() {
- System.out.println("防水");
- }
- }
- =========================================================
- //新增家庭品牌安全门 实现该有功能的接口
- public class HomeDoor implements AntiTheft,Fireproof{
- @Override
- public void antiTheft() {
- System.out.println("防盗");
- }
- @Override
- public void fireproof() {
- System.out.println("防火");
- }
- }
- ===========================================================
- public class ClientTest {
- public static void main(String[] args) {
- // 创建学校防盗门
- SchoolDoor s = new SchoolDoor();
- // 实现学校防盗门功能
- s.fireproof();
- s.waterproof();
- s.antiTheft();
-
- // 创建家庭品牌安全门
- HomeDoor homeDoor = new HomeDoor();
- //实现家庭品牌安全门的功能
- homeDoor.antiTheft();
- homeDoor.fireproof();
- }
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |