【设计模式】软件设计七大原则 ( 接口隔离原则 | 代码示例 )

举报
韩曙亮 发表于 2022/01/11 00:56:19 2022/01/11
【摘要】 文章目录 一、接口隔离原则简介二、接口隔离原则代码示例 ( 反面示例 )1、接口定义 ( 接口臃肿 )2、实现类 13、实现类 2 三、接口隔离原则代码示例 ( 推荐用法 )1、接口 12、接...





一、接口隔离原则简介



接口隔离原则 :多个 专门的 接口 , 不使用 单一 的总接口 , 客户端 不应该依赖不需要的 接口 ;

一个类 对 另一个类 的依赖 , 应该建立在 最小接口 上 ; 如果 有一个 大接口 , 里面有 很多方法 , 如果使用一个类 实现该接口 , 所有的类都要实现 ;

建立 功能 单一接口 , 不要建立 庞大 臃肿 的接口 ;

尽量细化接口 , 接口中的方法尽量少 ;


接口设计适度原则 : 接口隔离原则 中 最重要的就是 注意 适度原则 , 一定要适度 ;

接口设计的 过大 , 过小 , 都不合适 ; 设计接口时 , 多花时间去思考策划 ;

接口方法 尽量少 , 但要有限度 , 对接口进行细化 , 肯定能 提高系统设计的灵活性 , 但是如果 接口设计的过小 , 方法过少 , 则会 造成接口数量过多 , 提高整个程序设计的复杂性 ;


接口隔离原则 优点 : 符合 高内聚 , 低耦合设计思想 , 使得类具有很好的 可读性 , 可扩展性 , 可维护性 ;

  • 降低耦合 : 平时设计接口时 , 只暴露客户端需要的方法 , 客户端不需要的方法 , 直接隐藏起来 ; 只有专注的为一个模块提供定制服务 , 才能 建立最小的依赖关系 , 这样就降低了耦合程度 ;

  • 提高内聚 : 减少对外交互 , 使用接口中最少的方法 , 完成最多的事情 ;

实际开发中 , 实践接口隔离原则时 , 也要根据业务场景 , 业务模型 , 以及以后有可能会发生变更的地方 , 对于这些做一些预判 , 抽象出业务模型很重要 ;





二、接口隔离原则代码示例 ( 反面示例 )




1、接口定义 ( 接口臃肿 )


package interfacesegregation;

/**
 * 动物行为接口
 *      该接口中声明的方法过多 , 方法分属于不同的类型
 *      该接口可以进一步细化
 */
public interface IAnimationAction {
    void eat();
    void fly();
    void walk();
    void swim();
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

2、实现类 1


package interfacesegregation;

/**
 * 定义 Dog 类 , 实现 IAnimationAction 接口
 *      需要实现该接口下的所有方法
 *      很明显狗不能飞 , fly 方法只能空着 , 没有实际意义
 */
public class Dog implements IAnimationAction {
    @Override
    public void eat() {
    }

    @Override
    public void fly() {
    }

    @Override
    public void walk() {
    }

    @Override
    public void swim() {
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

3、实现类 2


package interfacesegregation;

/**
 * 定义 Bird 类 , 实现 IAnimationAction 接口
 *      需要实现该接口下的所有方法
 *      很明显鸟不能游泳 , swim 方法只能空着 , 没有实际意义
 */
public class Bird implements IAnimationAction {
    @Override
    public void eat() {
    }

    @Override
    public void fly() {
    }

    @Override
    public void walk() {
    }

    @Override
    public void swim() {
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24




三、接口隔离原则代码示例 ( 推荐用法 )




1、接口 1


package interfacesegregation;

public interface IEatAnimalAction {
    void eat();
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

2、接口 2


package interfacesegregation;

public interface IFlyAnimalAction {
    void fly();
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

3、接口 3


package interfacesegregation;

public interface ISwimAnimalAction {
    void swim();
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

4、接口 4


package interfacesegregation;

public interface IWalkAnimalAction {
    void walk();
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

5、实现类


package interfacesegregation;

/**
 * 狗可以 吃 / 走路 / 游泳
 *      这里直接继承 3 个对应的接口
 *      并实现接口中的方法
 *
 * 细粒度接口可以组装 , 粗粒度接口无法拆分
 */
public class Dog implements IEatAnimalAction,
        IWalkAnimalAction,
        ISwimAnimalAction {

    @Override
    public void eat() {

    }

    @Override
    public void swim() {

    }

    @Override
    public void walk() {

    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/119885264

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。