ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-04-20 20:32:56  阅读:138  来源: 互联网

标签:Interface1 void System 接口隔离 Segregation println 设计模式 public out


接口隔离原则介绍

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有