首页 > 其他分享 >接口隔离原则

接口隔离原则

时间:2023-08-25 22:37:19浏览次数:34  
标签:原则 void System 接口隔离 println new public out

接口隔离原则

介绍

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

案例引入

A类,通过接口1依赖B类,C类通过依赖接口1依赖D类,A类只会用到1-3方法,C类只会使用到1,4,5方法。

uml类图

代码实现
public class Segregation1 {
    public static void main(String[] args) {
        A a = new A();
        a.dependency1(new B());
        a.dependency2(new B());
        a.dependency3(new B());

        C c = new C();
        c.dependency1(new D());
        c.dependency4(new D());
        c.dependency5(new D());
    }
}

interface Interface1{
    public void operation1();
    public void operation2();
    public void operation3();
    public void operation4();
    public 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");
    }
}

class A{

    public void dependency1(Interface1 i){
        i.operation1();
    }
    public void dependency2(Interface1 i){
        i.operation2();
    }
    public void dependency3(Interface1 i){
        i.operation3();
    }

}

class C{
    public void dependency1(Interface1 i){
        i.operation1();
    }
    public void dependency4(Interface1 i){
        i.operation4();
    }
    public void dependency5(Interface1 i){
        i.operation5();
    }
}
案例分析
  • 类A通过接口interface1依赖B,类C通过接口依赖D,因为接口interface1对于A类和C类来说,不是最小的接口,就会导致类B,类D去重写使用不到的方法
  • 将接口interface1拆分成独立的接口,类A和C分别和其依赖的接口建立依赖关系。也就是采用接口隔离原则。
  • 接口interface1出现的方法,也拆分成三个接口 如下图所示

案例改进

uml类图

public class Segregation2 {
    public static void main(String[] args) {
        A a = new A();
        a.dependency1(new B());
        a.dependency2(new B());
        a.dependency3(new B());

        C c = new C();
        c.dependency1(new D());
        c.dependency4(new D());
        c.dependency5(new D());
    }
}

interface Interface1 {
    public void operation1();
}

interface Interface2{
    public void operation2();
    public void operation3();
}

interface Interface3{
    public void operation4();
    public void operation5();
}


class B implements Interface1,Interface2{
    @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");
    }
}

class D implements Interface1,Interface3 {
    @Override
    public void operation1() {
        System.out.println("D 类 operation1");
    }

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

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

class A{

    public void dependency1(Interface1 i){
        i.operation1();
    }
    public void dependency2(Interface2 i){
        i.operation2();
    }
    public void dependency3(Interface2 i){
        i.operation3();
    }

}

class C{
    public void dependency1(Interface1 i){
        i.operation1();
    }
    public void dependency4(Interface3 i){
        i.operation4();
    }
    public void dependency5(Interface3 i){
        i.operation5();
    }
}

这样设计的uml类图,满足了案例A,B,C,D四类需要,也满足了接口隔离原则。
只是为了记录自己的学习历程,且本人水平有限,不对之处,请指正。

标签:原则,void,System,接口隔离,println,new,public,out
From: https://www.cnblogs.com/changming06/p/17658044.html

相关文章

  • 面向对象设计原则
    前言在面向对象的软件设计中,只有尽量降低各个模块之间的耦合度,才能提高代码的复用率,系统的可维护性、可扩展性才能提高。面向对象的软件设计中,有23种经典的设计模式,是一套前人代码设计经验的总结,如果把设计模式比作武功招式,那么设计原则就好比是内功心法。常用的设计原则有七个......
  • 趣解设计原则之单一职责(论一个小老板的发家史)
    一、前言今天我们来聊一聊设计原则中的单一职责,还是按照惯例,先介绍一下含义,然后呢,我们再来讲一个小故事。**单一职责(SRP:SingleReposibilityPrinciple)**的定义:一个类或者模块只负责完成一个职责。二、小故事今天登场的主角,是一个叫阿明的小老板,他从小就经商,很有头脑。他经......
  • 设计模式和七大原则概述及单一职责原则详解
    设计模式的目的编写软件过程中,程序员面临着来自,耦合性,内聚性以及可维护性,扩展性,重用性等方面的挑战。设计模式是为了让程序,具有更好的1.代码重用性(相同代码,不用重复编写)2.可读性(编程规范性,便于其他程序员的阅读和理解)3.可扩展性(当需要增加新的功能时,非常的方便)4.可靠......
  • 软件的设计原则
    任何傻瓜都可以写出计算机能懂的代码,但好的程序员可以写出人类能懂的代码—–MartinFowler如果你是新手,你可能会问,为什么代码需要设计原则?我想说的是肯定不是为了故作高深,存在即是合理。如果写了一个简单的程序,你可能不需要设计原则。如果你写了一个复杂的,但是之后再也不会......
  • 【设计模式之禅】里氏替换原则
    什么叫里氏替换原则?"这里需要如下的替换性质:若对类型S的每一个对象O1,都存在一个类型T的对象O2,使得在所有针对T编写的程序P中,用O1替换O2后,程序P的行为功能不变,则S是T的子类型。"这是最专业最权威的定义,但是我当时就是看不懂这句话,看完这个章节也没有完全理解,只能通俗易......
  • C/C++基础知识点——设计原则及设计模式
    如何实现模块间高内聚、低耦合?封装与抽象;添加中间层;模块化;设计思想与原则单一职责;接口隔离原则;依赖倒置;迪米特原则;多用组合少用继承;设计模式:观察者模式设计原则及设计模式六大设计原则:单一职责原则;里氏替换原则;开闭原则;依赖倒置原则;接口隔离原则;最少知识原则。......
  • 15项设计原则
    N+1设计。回滚设计。禁用设计。监控设计。设计多活数据中心。使用成熟的技术。异步设计。无状态系统。水平扩展而非垂直升级。设计时至少要有两步前瞻性。非核心则购买。使用商品化硬件。小构建、小发布和快试错。隔离故障。自动化。......
  • 设计模式的六大原则
    开放封闭原则(OpenClosePrinciple)对外扩展是开放的,对内修改是封闭的,目的是保证程序的可扩展性以及可维护性 里氏代换原则(LiskovSubstitutionPrinciple)子类可以扩展父类的功能,但不能改变父类原有的功能。规定了子类不得重写父类的普通方法,只能重写父类的抽象方法,如果在设......
  • 设计模式 solid原则
    SOLID原则是一组面向对象设计和编程的原则,旨在提供可维护、可扩展和可重用的代码。下面是SOLID原则的简要介绍:单一职责原则(SingleResponsibilityPrinciple,SRP):一个类应该只有一个引起变化的原因。换句话说,一个类应该只负责一个单一的功能或职责。开放封闭原则(Open-ClosedP......
  • Java设计模式的七大基本原则
    设计模式是为了让程序(软件)具有更好的代码重用性,可读性,可扩展性,可靠性,使程序呈现高内聚,低耦合的特性设计模式的原则其实就收是程序员在编写时,应当遵守的原则,也是各种模式的基础(Java设计模式的七大基本原则)一、单一职责原则<A>对类来说的,即一个类应只负责一项职责,如果A负责......