接口隔离原则 Interface Segregation Principle

接口隔离原则介绍:

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



示例:

错误示例:

package com.kittenplus.principle.segregation;

public class seregation2 {

    public static void main(String[] args) {
}

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();
            }
        }
    }
}
    

正确方法:

package com.kittenplus.principle.segregation;

public class seregation2 {

    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());

    }
}

interface Interface1{
    void operation1();
}
interface Interface2{
    void operation2();
    void operation3();
}
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 实现了 operation2");
    }
    public void operation3() {
        System.out.println("B 实现了 operation3");
    }
}

class D implements Interface1,Interface3{
    public void operation1() {
        System.out.println("D 实现了 operation1");
    }
    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(Interface2 i) {
        i.operation2();
}
    public void depend3(Interface2 i) {
        i.operation3();
    }
}

    class C{    //C类通过 Interface1 依赖(使用)D类,但是只会用到1 2 3 方法
        public void depend1(Interface1 i) {
            i.operation1();
    }
        public void depend4(Interface3 i) {
            i.operation4();
    }
        public void depend5(Interface3 i) {
            i.operation5();
    }
}
    

原文地址:https://www.cnblogs.com/thinkAboutMore/p/12405551.html

时间: 2024-10-14 03:32:35

接口隔离原则 Interface Segregation Principle的相关文章

Java设计原则—接口隔离原则(转)

接口隔离原则 Interface Segregation Principle    定义: 客户端不应该依赖它不需要的接口 类间的依赖关系应该建立在最小的接口上 我们可以把这两个定义概括为一句话:建立单一接口,不要建立臃肿庞大的接口.再通俗一点讲:接口尽量细化,同时接口中的方法尽量少. 提供给每个模块的都应该是单一接口,提供给几个模块就应该有几个接口,而不是建立一个庞大的臃肿的接口,容纳所有的客户端访问. 接口是我们设计时对外提供的契约,通过分散定义多个接口,可以预防未来变更的扩散,提高系统的灵

设计模式六大原则(4):接口隔离原则

接口隔离原则 定义:客户端不应该依赖它不需要的接口:一个类对另一个类的依赖应该建立在最小的接口上. 问题由来:类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需要的方法. 解决方案:将臃肿的接口I拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系.也就是采用接口隔离原则. 接口隔离原则(Interface  Segregation Principle, ISP):使用多个专门的接口,而不使用单一的总接口,即客户端

Java 设计模式(十三) 接口隔离原则(ISP)

接口隔离原则(Interface Segregation Principle) ISP基本概念 接口 实例接口(Object Interface):一个类的实例对象是对一个类型的事物的描述,这时一种接口. 类接口(Class Interface):Java中interface关键定义的接口,也是我们通常理解的狭义的接口 ISP定义 客户端(模块)不应该依赖它不需要的接口(接口的纯粹性) 一个模块应该依赖它需要的接口,需要什么接口就提供什么接口,把不需要的接口剔除掉,那就需要对接口进行细化,保证接

设计模式之六大原则——接口隔离原则(ISP)

设计模式之六大原则——接口隔离原则(ISP) 转载于:http://www.cnblogs.com/muzongyan/archive/2010/08/04/1792528.html 接口隔离原则 Interface Segregation Principle    定义: 客户端不应该依赖它不需要的接口 类间的依赖关系应该建立在最小的接口上 我们可以把这两个定义概括为一句话:建立单一接口,不要建立臃肿庞大的接口.再通俗一点讲:接口尽量细化,同时接口中的方法尽量少. 提供给每个模块的都应该是单一

面向对象设计原则之接口隔离原则

接口隔离原则定义如下: 接口隔离原则(Interface  Segregation Principle, ISP):使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口. 根据接口隔离原则,当一个接口太大时,我们需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可.每一个接口应该承担一种相对独立的角色,不干不该干的事,该干的事都要干.这里的“接口”往往有两种不同的含义:一种是指一个类型所具有的方法特征的集合,仅仅是一种逻辑上的抽象:另外一种是指某

接口分离原则(Interface Segregation Principle)

接口分离原则(Interface Segregation Principle)用于处理胖接口(fat interface)所带来的问题.如果类的接口定义暴露了过多的行为,则说明这个类的接口定义内聚程度不够好.换句话说,类的接口可以被分解为多组功能函数的组合,每一组都服务于不同的客户类,而不同的客户类可以选择使用不同的功能分组. ISP 原则承认了对象设计中非内聚接口的存在.但它建议客户类不应该只通过一个单独的类来使用这些接口.取而代之的是,客户类应该通过不同的抽象基类来使用那些内聚的接口.在不同

接口隔离原则(Interface Segregation Principle)ISP

using System; using System.Collections.Generic; using System.Text; namespace InterfaceSegregationPrinciple { //接口隔离原则(Interface Segregation Principle)ISP //Clients should not be forced to depend upon interfaces that they don's use.(客户端不应该依赖它不需要的接口) /

设计模式六大原则(4):接口隔离原则(Interface Segregation Principle)

接口隔离原则: 使用多个专门的接口比使用单一的总接口要好. 一个类对另外一个类的依赖性应当是建立在最小的接口上的. 一个接口代表一个角色,不应当将不同的角色都交给一个接口.没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染. "不应该强迫客户依赖于它们不用的方法.接口属于客户,不属于它所在的类层次结构."这个说得很明白了,再通俗点说,不要强迫客户使用它们不用的方法,如果强迫用户使用它们不使用的方法,那么这些客户就会面临由于这些不使用的方法的改变所带来的改变. 定义:

六大设计原则--接口隔离原则【 Interface Segregation Principle】

声明:本文内容是从网络书籍整理而来,并非原创. 定义 第一种定义: Clients should not be forced to depend upon interfaces that they don't use. 客户端不应该依赖它不需用的接口. 第二种定义: The dependency of one class to another one should depend on the smallest possible interface. 类间的依赖关系应该建立在最小的接口上. 两种定