设计模式-接口隔离原则

基本介绍

  1. 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上
  2. 先看一张图:
  1. 类A通过接口Interface1 依赖类B,类C通过接口Interface1 依赖类D,如果接口Interface1对于类A和类C来说不是最小接口,那么类B和类D必须去实现他们不需要的方法。
  2. 按隔离原则应当这样处理:

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

传统代码

复制代码
/**
 * @author zhupanlin
 * @version 1.0
 * @description: TODO
 * @date 2024/4/9 10:47
 */
public class Segregation1 {

    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("B 实现了 operation1");
    }

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

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

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

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

class D implements Interface1{

    @Override
    public void operation1() {
        System.out.println("D 实现了 operation1");
    }

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

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

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

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


// A类通过接口Interface 依赖(使用)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类通过接口Interface 依赖(使用)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();
    }
}

应传统方法的问题和使用接口隔离原则改进

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

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

接口Interface1中出现的方法,根据实际情况拆分为三个接口

代码示例:

复制代码
/**
 * @author zhupanlin
 * @version 1.0
 * @description: TODO
 * @date 2024/4/9 10:47
 */
public class Segregation1 {

    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("B 实现了 operation1");
    }

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

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

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

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

class D implements Interface1{

    @Override
    public void operation1() {
        System.out.println("D 实现了 operation1");
    }

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

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

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

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


// A类通过接口Interface 依赖(使用)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类通过接口Interface 依赖(使用)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();
    }
}
相关推荐
码语智行3 分钟前
首页地图功能分析
java
段ヤシ.7 分钟前
回顾Java知识点,面试题汇总Day10:日期类、IO流(持续更新)
java·序列化·反序列化·日期类·i/o流
IT_陈寒20 分钟前
Python的线程池居然把我坑在了垃圾回收这块
前端·人工智能·后端
luck_bor36 分钟前
IO流知识点笔记
java·开发语言·笔记
zhangxingchao1 小时前
AI应用开发八:RAG相关技术总结
前端·人工智能·后端
吴佳浩1 小时前
Go史上最大“打脸”现场来了:泛型方法终于实现了
后端·go
Huyuejia1 小时前
runtime-ask
后端
Rust研习社1 小时前
90% 的 Rust 新手都不知道的 3 个实用开发技巧
后端·rust·编程语言
大圣编程1 小时前
面向对象深度理解
java·开发语言·算法
影寂ldy1 小时前
C# const 常量 / readonly 只读 / static readonly
java·开发语言·c#