首页 > 其他分享 >软件设计原则—接口隔离原则

软件设计原则—接口隔离原则

时间:2024-05-19 18:52:52浏览次数:23  
标签:antiTheft 原则 软件设计 void System 接口隔离 println public out

B类需要方法1

image

好处是b类继承A类后就有了方法1的功能,问题是B类被迫有了它不使用的方法2

这个其实是根据方法的职责细分接口,只需要依赖其中一个接口就可以了

image


客户端不应该被迫依赖于它不使用的方法;一个类对另一个类的依赖应该建立在最小的接口上。

下面看一个例子来理解接口隔离原则:安全门案例

我们需要创建一个A品牌的安全门,该安全门具有防火、防水、防盗的功能。可以将防火,防水,防盗功能提取成一个接口,形成一套规范。类图如下:

image

SafetyDoor安全门接口有全部的功能

package com.lmcode.principles.Interfaceisolationprinciple;

public interface SafetyDoor {
    void waterproof();
    void fireproof();
    void antiTheft();
}

ASafetyDoor

package com.lmcode.principles.Interfaceisolationprinciple;

public class ASafetyDoor implements SafetyDoor{
    public void antiTheft() {
        System.out.println("防盗");
    }

    public void fireproof() {
        System.out.println("防火");
    }

    public void waterproof() {
        System.out.println("防水");
    }
}

BSafetyDoor

package com.lmcode.principles.Interfaceisolationprinciple;

public class BSafetyDoor implements SafetyDoor{
    public void antiTheft() {
        System.out.println("防盗");
    }

    @Override
    public void waterproof() {

    }

    public void fireproof() {
        System.out.println("防火");
    }
}

main

package com.lmcode.principles.Interfaceisolationprinciple;

public class main {
    public static void main(String[] args) {
        ASafetyDoor a = new ASafetyDoor();
        a.antiTheft();
        a.fireproof();
        a.waterproof();
        BSafetyDoor b = new BSafetyDoor();
        b.antiTheft();
        b.fireproof();
    }
}

上面的设计我们发现了它存在的问题,A品牌的安全门具有防盗,防水,防火的功能。现在如果我们还需要再创建一个B品牌的安全门,而该安全门只具有防盗、防水功能呢?很显然如果实现SafetyDoor接口就违背了接口隔离原则,那么我们如何进行修改呢?看如下类图:

image

AntiTheft

public interface AntiTheft {
    void antiTheft();
}

Fireproof

public interface Fireproof {
    void fireproof();
}

Waterproof

public interface Waterproof {
    void waterproof();
}

ASafetyDoor

public class ASafetyDoor implements AntiTheft,Fireproof,Waterproof {
    public void antiTheft() {
        System.out.println("防盗");
    }

    public void fireproof() {
        System.out.println("防火");
    }

    public void waterproof() {
        System.out.println("防水");
    }
}

BSafetyDoor

public class BSafetyDoor implements AntiTheft,Fireproof {
    public void antiTheft() {
        System.out.println("防盗");
    }

    public void fireproof() {
        System.out.println("防火");
    }
}

标签:antiTheft,原则,软件设计,void,System,接口隔离,println,public,out
From: https://www.cnblogs.com/lm02/p/18200591

相关文章

  • 软件设计原则—依赖倒转原则
    高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。下面看一个例子来理解依赖倒转原则:组装电脑现要组装一台电脑,需要配件cpu,硬盘,内存条。只有这些配......
  • 软件设计原则—里氏代换原则
    里氏代换原则是面向对象设计的基本原则之一。里氏代换原则:任何基类可以出现的地方,子类一定可以出现。通俗理解:子类可以扩展父类的功能,但不能改变父类原有的功能。换句话说,子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。如果通过重写父类的方法来完成新的......
  • 软件设计原则—开闭原则
    在程序需要进行拓展的时候,不能去修改原有的代码,而是实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类。因为抽象灵活性好,适应性广,只要抽象的合理,可以基本保持软件架构的稳定。而软件中易变的细节可以从抽象派生......
  • 软件设计师(中级) 笔记
    软件设计师「学习路线」(推荐该顺序学习,按照先易后难排序)1、上午题—计算机系统(5~6分)1.cpu:cpu是硬件系统的核心功能:控制器(程序控制,操作控制)运算器(时间处理,数据处理)运算器:算术逻辑单元(ALU):实现算术运算和逻辑运算......
  • 设计原则
    单一功能原则:它规定一个类应该只有一个发生变化的原因,即一个类/方法只干一件事。开闭原则:对于扩展是开放的,但是对于修改是封闭的,这意味着在不修改一个软件实体的基础上去扩展其功能。依赖倒置原则:要底层实现尽量依赖抽象类与接口,方便系统间的解耦,有利于扩展与维护。合成复用原......
  • 项目管理十二原则
    价值驱动的项目管理知识体系第七版是新的基于价值的一个项目管理体系。包括了基于过程的项目管理,也包括了这个基于价值的新的项目管理体系。十二原则就是项目经理看待项目管理的十二个角度,十二个底线项目管理原则国家原则就是绝对不能突破的。什么是原则?原则属于价......
  • 不可变(immutable)设计原则
    我们先从Java的数据类型与类型检查说起数据类型数据类型是什么?数据类型是一组值以及可以对其执行的操作,比如:-boolean:Truthvalue(trueorfalse)-int:Integer(0,1,-47)-double:Realnumber(3.14,1.0,-2.1)-String:Text("Hello","example")而变量就是用特......
  • 软件设计师基础学习 十三
    十三、结构化开发方法13.1*系统分析与概述1,认识、理解当前的环境,获得当前系统的“物理模型”2.从当前系统的“物理模型”抽象出当前系统的“逻辑模型”3.对当前系统的“逻辑模型”进行分析和优化,建立目标系统的“逻辑模型”4.对目标系统的逻辑模型具体化(物理化),建立目标系......
  • 软件设计师基础学习 十四
    十四、面向对象技术14.1面向对象开发概念:对象:由数据及其操作所构成的封装体,是系统中用来描述客观事务的一个实体,是构成系统的一个基本单位。一个对象通常可以由对象名、属性和方法3个部分组成类:现实世界中实体的形式化描述,类将该实体的属性(数据)和操作(函数)封装在一起......
  • [实验感悟] 系列(1) 野外实验要遵循的几个原则
    关键词:野外实验、学生、遥感实验、种苗表型作者:ludwig1860日期:2024.5.15印象中有2年多没有亲自带学生野外实验了,甚至之前从来没有带学生进行过一次完整地、系统地、历经实验设计-方案制定-仪器准备-方法学习-细致考虑-野外实践-数据整理-数据处理整套流程的实验......