设计模式七大原则-接口隔离原则InterfaceSegregation

接口隔离原则:

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

案例:

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

java 复制代码
public class interfaceSegregation {
    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 interface1{
    void method1();
    void method2();
    void method3();
    void method4();
    void method5();
}

class B implements interface1{

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

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

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

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

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

class D implements interface1{

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

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

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

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

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

 class A {
    void depend1(interface1 interface1){
        interface1.method1();
    }
     void depend2(interface1 interface1){
         interface1.method2();
     }
     void depend3(interface1 interface1){
         interface1.method3();
     }
 }

 class C {
     void depend1(interface1 interface1){
         interface1.method1();
     }
     void depend4(interface1 interface1){
         interface1.method4();
     }
     void depend5(interface1 interface1){
         interface1.method5();
     }

 }

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

按照实际情况将Interface1分为Interface1、Interface2、Interface3 等,代码略。

在项目中常见的业务类直接依赖另外一个业务类的时候往往也是违背接口隔离原则的,在实际项目中,出于开发速度、维护成本等原因,通常不会过于细化接口。

相关推荐
Michael_lcf21 小时前
Agent设计模式:思考-行动-观察循环的本质与局限
设计模式·agent设计模式·agent设计模式的本质
丰锋ff1 天前
设计模式学习笔记
笔记·学习·设计模式
米啦啦.1 天前
设计模式/
观察者模式·单例模式·设计模式·工厂模式
QuZhengRong1 天前
【AI】Agent 全栈进阶|Agent 设计模式
人工智能·学习·设计模式·llm·agent
码匠许师傅1 天前
【设计模式精讲】2. 设计原则基石:SOLID 与几条关键原则
java·设计模式·log4j
AI人工智能+电脑小能手1 天前
大白话说Java设计模式-41-备忘录模式(源码剖析篇)
java·设计模式·备忘录模式·源码分析·serializable·undo log·spring statemachine
yinchnag1 天前
CRTP:奇异递归模板模式在 Go 模块系统中的实现
设计模式·go
AI人工智能+电脑小能手1 天前
大白话说Java设计模式-40-备忘录模式(业务实战篇)
java·设计模式·事务回滚·备忘录模式·状态保存·spring transactional·购物车快照
bryant_meng2 天前
【Codex】Part 19 — Codex Prompt Design Patterns
设计模式·prompt·playbook·结果优先·用证据定义完成
AI人工智能+电脑小能手2 天前
大白话说Java设计模式-38-迭代器模式(业务实战篇)
java·设计模式·迭代器模式·stream·遍历封装·集合通用·分页遍历