其他分享
首页 > 其他分享> > 【设计模式】七大设计原则(四)—— 接口隔离原则(Interface Segregation Principle)

【设计模式】七大设计原则(四)—— 接口隔离原则(Interface Segregation Principle)

作者:互联网

接口隔离原则介绍

1.客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立再最小的接口上

2.使用多个隔离的接口,比使用单个接口要好。

3.他还有另一个意思:降低类之间的耦合度。


示例

image

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");
    }
}

class A{ // A类通过接口Interface1 依赖(使用)B类,但只会使用1,2,3方法
    public void depend1(Interface1 i){
        i.operation1();
    }

    public void depend2(Interface1 i){
        i.operation2();
    }

    public void depend3(Interface1 i){
        i.operation3();
    }
}

class C{ // C类通过接口Interface1 依赖(使用)D类,但只会使用1,4,5方法
    public void depend1(Interface1 i){
        i.operation1();
    }

    public void depend4(Interface1 i){
        i.operation4();
    }

    public void depend5(Interface1 i){
        i.operation5();
    }
}

可以看到其实A类依赖B类,C类依赖D类都只使用了部分的方法,但是B类和D类都实现了接口Interface1的五个方法,有部分方法是没用到的。按照接口隔离原则应当将接口Interface1拆成几个接口,类A和类C分别与他们需要的接口建立依赖关系。

//接口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 实现了 operation4");
    }
    public void operation3(){
        System.out.println("B 实现了 operation5");
    }
}

class D implements Interface1,Interface3{
    public void operation1(){
        System.out.println("D 实现了 operation1");
    }
    public void operation4(){
        System.out.println("D 实现了 operation2");
    }
    public void operation5(){
        System.out.println("D 实现了 operation3");
    }
}

class A{ // A类通过接口Interface1,Interface2 依赖(使用)B类,但只会使用1,2,3方法
    public void depend1(Interface1 i){
        i.operation1();
    }

    public void depend2(Interface2 i){
        i.operation2();
    }

    public void depend3(Interface2 i){
        i.operation3();
    }
}

class C{ // C类通过接口Interface1,Interface3 依赖(使用)D类,但只会使用1,4,5方法
    public void depend1(Interface1 i){
        i.operation1();
    }

    public void depend4(Interface3 i){
        i.operation4();
    }

    public void depend5(Interface3 i){
        i.operation5();
    }
}

使用一下

public class Segregation1 {
    public static void main(String[] args){
        //使用一下
        A a=new A();
        a.depend1(new B());// A类通过接口去依赖B
        a.depend2(new B());
        a.depend3(new B());

        C c=new C();
        c.depend1(new D());// C类通过接口去依赖(使用)D类
        c.depend4(new D());
        c.depend5(new D());
    }
}

image

标签:Interface1,void,System,接口隔离,Segregation,println,设计模式,public,out
来源: https://www.cnblogs.com/kakaji/p/16171584.html