zoukankan      html  css  js  c++  java
  • 设计模式七大原则之接口隔离原则

    接口隔离原则

    基本介绍

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

    1. 先看一张图:

      

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

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

    传统方法应用实例

    1. 类A通过接口Interface1依赖类B, 类C通过接口Interface1依赖类D,请编写代码完成此应用实例。

    2. 先看一张图:

     代码:

    package com.atguigu.principle.segregation;
    
    public class Segregation1 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
        }
    
    }
    
    //接口
    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();
        }
    }

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

    1. 类A通过接口Interface1依赖类B,类C通过接口Interface1依赖类D,如果接口

      Interface1对于类A和类C来说不是最小接口,那么类B和类D必须去实现他们不

      需要的方法

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

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

    1. 先看一张图

    代码:

    package com.atguigu.principle.segregation.improve;
    
    public class Segregation1 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            // 使用一把
            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());
    
        }
    
    }
    
    // 接口1
    interface Interface1 {
        void operation1();
    
    }
    
    // 接口2
    interface Interface2 {
        void operation2();
    
        void operation3();
    }
    
    // 接口3
    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,Interface2 依赖(使用) 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,Interface3 依赖(使用) D类,但是只会用到1,4,5方法
        public void depend1(Interface1 i) {
            i.operation1();
        }
    
        public void depend4(Interface3 i) {
            i.operation4();
        }
    
        public void depend5(Interface3 i) {
            i.operation5();
        }
    }

        

  • 相关阅读:
    [置顶] 从零开始学C++之STL(二):实现简单容器模板类Vec(vector capacity 增长问题、allocator 内存分配器)
    HDU4607(求树中的最长链)
    java从文件中读取数据然后插入到数据库表中
    rcp(插件开发)插件B需要引用插件A中的jar包-如何处理依赖关系
    HDU 2084 数塔
    Object-c学习之路二(oc内存管理黄金法则1)
    android adb命令 unable to connect to 192.168.1.155:5555
    安装node.js / npm / express / KMC
    oracle断电重启之ORA-00600[4194]
    virtualbox虚拟机迁移出现"connot find device eth0"错误
  • 原文地址:https://www.cnblogs.com/LEPENGYANG/p/15818054.html
Copyright © 2011-2022 走看看