美文网首页
2 接口隔离原则

2 接口隔离原则

作者: 思无邪_1c6a | 来源:发表于2019-07-30 23:04 被阅读0次

    接口隔离原则

    一、基本介绍

    1)一个类对另一个类的依赖应该建立在最小的接口上

    1.png

    2) 类A通过接口Interfacel依赖类B,类C通过接口Interfacel依赖类D,如果接口Interfacel对于类A和类C来说不是最小接口,那么类B和类D必须去实现他们不需要的方法。

    3) 按隔离原则应当这样处理:
    将接口Interfacel拆分为独立的几个接口(这里我们拆分成3个接口),类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则

    二、应用实例

    1.未使用接口隔离原则

    //接口
    interface Interface1 {
        void operation1();
        void operation2();
        void operation3();
        void operation4();
        void operation5();
    }
    
    class B implements Interface1 {
        public void operation1() {
            System.out.println("B 实现了 operation1");
        }
        public void operation2() {
            System.out.println("B 实现了 operation2");
        }
        public void operation3() {
            System.out.println("B 实现了 operation3");
        }
        public void operation4() {
            System.out.println("B 实现了 operation4");
        }
        public void operation5() {
            System.out.println("B 实现了 operation5");
        }
    }
    
    class D implements Interface1 {
        public void operation1() {
            System.out.println("D 实现了 operation1");
        }
        public void operation2() {
            System.out.println("D 实现了 operation2");
        }
        public void operation3() {
            System.out.println("D 实现了 operation3");
        }
        public void operation4() {
            System.out.println("D 实现了 operation4");
        }
        public void operation5() {
            System.out.println("D 实现了 operation5");
        }
    }
    //A 类通过接口Interface1 依赖(使用) B类,但是只会用到1,2,3方法
    class A {
        public void depend1(Interface1 i) {
            i.operation1();
        }
        public void depend2(Interface1 i) {
            i.operation2();
        }
        public void depend3(Interface1 i) {
            i.operation3();
        }
    }
    //C 类通过接口Interface1 依赖(使用) D类,但是只会用到1,4,5方法
    class C {
        public void depend1(Interface1 i) {
            i.operation1();
        }
        public void depend4(Interface1 i) {
            i.operation4();
        }
        public void depend5(Interface1 i) {
            i.operation5();
        }
    }
    

    改进:将Interface1拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则

    2)使用接口隔离原则

    public class Segregation2 {
    
        public static void main(String[] args) {
            // A类通过接口去依赖B类
            A a = new A();
            a.depend1(new B());
            a.depend2(new B());
            a.depend3(new B());
    
            // C类通过接口去依赖(使用)D类
            C c = new C();
            c.depend1(new D());
            c.depend4(new D());
            c.depend5(new D());
        }
    }
    
    // 接口1
    interface Interface1 {
        void operation1();
    }
    
    // 接口2
    interface Interface2 {
        void operation2();
        void operation3();
    }
    // 接口3
    interface Interface3 {
        void operation4();
        void operation5();
    }
    
    class B implements Interface1, Interface2 {
        public void operation1() {
            System.out.println("B 实现了 operation1");
        }
    
        public void operation2() {
            System.out.println("B 实现了 operation2");
        }
    
        public void operation3() {
            System.out.println("B 实现了 operation3");
        }
    
    }
    
    class D implements Interface1, Interface3 {
        public void operation1() {
            System.out.println("D 实现了 operation1");
        }
    
        public void operation4() {
            System.out.println("D 实现了 operation4");
        }
    
        public void operation5() {
            System.out.println("D 实现了 operation5");
        }
    }
    // A 类通过接口Interface1,Interface2 依赖(使用) B类,但是只会用到1,2,3方法
    class A {
        public void depend1(Interface1 i) {
            i.operation1();
        }
    
        public void depend2(Interface2 i) {
            i.operation2();
        }
    
        public void depend3(Interface2 i) {
            i.operation3();
        }
    }
    // C 类通过接口Interface1,Interface3 依赖(使用) D类,但是只会用到1,4,5方法
    class C {
        public void depend1(Interface1 i) {
            i.operation1();
        }
    
        public void depend4(Interface3 i) {
            i.operation4();
        }
    
        public void depend5(Interface3 i) {
            i.operation5();
        }
    }
    

    相关文章

      网友评论

          本文标题:2 接口隔离原则

          本文链接:https://www.haomeiwen.com/subject/nyqarctx.html