接口隔离原则

suaxi
2022-08-22 / 0 评论 / 41 阅读 / 正在检测是否收录...

定义:客户端不应该被迫依赖于它不使用的方法,即:一个类对另一个类的依赖应该建立在最小的接口上

以安全门为例:

存在的问题:如果要增加新的品牌的安全门,则违背了开闭原则
4.1接口隔离原则.png

SafetyDoor

public interface SafetyDoor {

    /**
     * 防盗
     */
    void antiTheft();

    /**
     * 防火
     */
    void fireproof();

    /**
     * 防水
     */
    void waterproof();
}

TestSafetyDoor

public class TestSafetyDoor implements SafetyDoor {
    @Override
    public void antiTheft() {
        System.out.println("防盗");
    }

    @Override
    public void fireproof() {
        System.out.println("防火");
    }

    @Override
    public void waterproof() {
        System.out.println("防水");
    }
}

Client

public class Client {
    public static void main(String[] args) {
        //存在的问题:如果要增加新的品牌的安全门,则违背了开闭原则
        TestSafetyDoor testSafetyDoor = new TestSafetyDoor();
        testSafetyDoor.antiTheft();
        testSafetyDoor.fireproof();
        testSafetyDoor.waterproof();
    }
}


改进:

抽象出安全门各个功能的接口,新增其他品牌的安全门时只需实现对应功能的接口
4.2接口隔离原则.png

AntiTheft

public interface AntiTheft {

    /**
     * 防盗
     */
    void antiTheft();
}

Fireproof

public interface Fireproof {

    /**
     * 防火
     */
    void fireproof();
}

Waterproof

public interface Waterproof {

    /**
     * 防水
     */
    void waterproof();
}

TestSafetyDoor

public class TestSafetyDoor 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("防水");
    }
}

Test01SafetyDoor

public class Test01SafetyDoor implements AntiTheft, Fireproof {

    @Override
    public void antiTheft() {
        System.out.println("防盗");
    }

    @Override
    public void fireproof() {
        System.out.println("防火");
    }
}

Client

public class Client {
    public static void main(String[] args) {
        //Test品牌安全门
        TestSafetyDoor testSafetyDoor = new TestSafetyDoor();
        testSafetyDoor.antiTheft();
        testSafetyDoor.fireproof();
        testSafetyDoor.waterproof();

        System.out.println("=================");

        //Test品牌安全门
        Test01SafetyDoor test01SafetyDoor = new Test01SafetyDoor();
        test01SafetyDoor.antiTheft();
        test01SafetyDoor.fireproof();
    }
}
0

评论 (0)

取消