设计模式学习笔记三、接口隔离原则

一、介绍

1、客户端不应该依赖它不需要的接口。一个类对另一个类的依赖应该建立在最小的接口上。

2、使用多个专门的接口比使用单一的总接口要好。

3、一个类对另外一个类的依赖性应当是建立在最小的接口上的。

4、、一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染。

5、“不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。”这个说得很明白了,再通俗点说,不要强迫客户使用它们不用的方法,如果强迫用户使用它们不使用的方法,那么这些客户就会面临由于这些不使用的方法的改变所带来的改变。

二、分析

1、类A 通过接口1 依赖类B ,类C 通过接口1 依赖类D。如果接口1对于A和C来说不是最小的接口,那么B、D就应该实现他们不需要的方法。

2、将接口1分为几个独立的接口,类A和类C分别与他们需要的接口建立以来 ==》 接口隔离原则(解耦)

三、代码

1、代码一

package com.hao.demo.design.segregation;

/**
 *
 * @author haoxiansheng
 * @date 2020-05-11
 */
public class SegregationTest1 {
    public static void main(String[] args) {

    }
}

interface Interface1 {
    void operation1();

    void operation2();

    void operation3();

    void operation4();

    void operation5();
}

class B implements Interface1 {
    @Override
    public void operation1() {
        System.out.println("实现了方法1");
    }

    @Override
    public void operation2() {
        System.out.println("实现了方法2");
    }

    @Override
    public void operation3() {
        System.out.println("实现了方法3");
    }

    @Override
    public void operation4() {
        System.out.println("实现了方法4");
    }

    @Override
    public void operation5() {
        System.out.println("实现了方法5");
    }
}


class D implements Interface1 {
    @Override
    public void operation1() {
        System.out.println("实现了方法1");
    }

    @Override
    public void operation2() {
        System.out.println("实现了方法2");
    }

    @Override
    public void operation3() {
        System.out.println("实现了方法3");
    }

    @Override
    public void operation4() {
        System.out.println("实现了方法4");
    }

    @Override
    public void operation5() {
        System.out.println("实现了方法5");
    }
}

class A { // A 类通过接口1 依赖使用 B类 只是使用1 、2 、3 方法
    public void depend1(Interface1 interface1) {
       interface1.operation1();
    }
    public void depend2(Interface1 interface1) {
        interface1.operation2();
    }
    public void depend3(Interface1 interface1) {
        interface1.operation3();
    }
}

class C { // C 类通过接口1 依赖使用D类  只是使用1 、4 、5 方法
    public void depend1(Interface1 interface1) {
        interface1.operation1();
    }
    public void depend4(Interface1 interface1) {
        interface1.operation4();
    }
    public void depend5(Interface1 interface1) {
        interface1.operation5();
    }
}

2、代码二

package com.hao.demo.design.segregation;

/**
 * @author haoxiansheng
 * @date 2020-05-11
 */
public class SegregationTest2 {
    public static void main(String[] args) {
        A a = new A();
        a.depend1(new B());
        a.depend2(new B());
        a.depend3(new B());
        C c = new C();
        c.depend1(new D());
        c.depend4(new D());
        c.depend5(new D());
    }
}

interface InterfaceOne {
    void operation1();
}

interface InterfaceTwo {

    void operation2();

    void operation3();

}
interface InterfaceThree {

    void operation4();

    void operation5();
}
class B1 implements InterfaceOne, InterfaceTwo {
    @Override
    public void operation1() {
        System.out.println("B1实现了方法1");
    }

    @Override
    public void operation2() {
        System.out.println("B1实现了方法2");
    }

    @Override
    public void operation3() {
        System.out.println("B1实现了方法3");
    }
}

class D1 implements InterfaceOne, InterfaceThree {
    @Override
    public void operation1() {
        System.out.println("D1实现了方法1");
    }

    @Override
    public void operation4() {
        System.out.println("D1实现了方法4");
    }

    @Override
    public void operation5() {
        System.out.println("D1实现了方法5");
    }
}

class A1 { // A1 类通过接口1, 接口2 依赖使用 B类 只是使用1 、2 、3 方法
    public void depend1(InterfaceOne interfaceOne) {
        interfaceOne.operation1();
    }
    public void depend2(InterfaceTwo interfaceTwo) {
        interfaceTwo.operation2();
    }
    public void depend3(InterfaceTwo interfaceTwo) {
        interfaceTwo.operation3();
    }
}

class C1 { // C1 类通过接口1 接口3 依赖使用D类  只是使用1 、4 、5 方法
    public void depend1(InterfaceOne interfaceOne) {
        interfaceOne.operation1();
    }
    public void depend4(InterfaceThree interfaceThree) {
        interfaceThree.operation4();
    }
    public void depend5(InterfaceThree interfaceThree) {
        interfaceThree.operation5();
    }
}

 

你可能感兴趣的:(【23种设计模式】)