JAVA【设计模式】接口隔离原则

一、设计模式的规范

设计模式遵循六⼤原则;单⼀职责( ⼀个类和⽅法只做⼀件事 )、⾥⽒替换( 多态,⼦类可扩展⽗类 )、依赖
倒置( 细节依赖抽象,下层依赖上层 )、接⼝隔离( 建⽴单⼀接⼝ )、迪⽶特原则( 最少知道,降低耦合 )、开闭
原则( 抽象架构,扩展实现 ),会在具体的设计模式章节中,进⾏体现。

二、接口隔离原则

定义:接口应尽量把大的接口设计为更小更具体的接口,设计为普适性,让接口中只包含了用户感兴趣的方法
在这里插入图片描述

三、示例

模拟场景:
1、例如:我国著名的四川变脸里面有一项规定:传男不传女,男的能拥有此技能,并且能实现,女生不能
2、例如:我们常玩的手游王者荣耀,设定每个技能为一个接口,后裔拥有射箭和眩晕的技能,而廉颇拥有眩晕和击飞的技能

非接口隔离原则(所有的方法都在一个接口里面)

技能接口:ISkill

package com.qf.principle.interfaceisolation.tradition;

/**
 * 技能接口
 */
public interface ISkill {

    /**
     * 射箭
     */
    void doarchery();

    /**
     * 眩晕
     */
    void dovertigo();

    /**
     * 击飞
     */
    void dofly();
}

后裔:HeroHouYi

package com.qf.principle.interfaceisolation.tradition;

/**
 * 后羿会射箭、眩晕
 */
public class HeroHouYi implements ISkill {
    @Override
    public void doarchery() {
        System.out.println("后羿会射箭");
    }

    @Override
    public void dovertigo() {
        System.out.println("后羿会眩晕");
    }

    @Override
    public void dofly() {
        //无此技能
    }
}

廉颇:HeroLianPo

package com.qf.principle.interfaceisolation.tradition;
/**
 * 廉颇会击飞、眩晕
 */
public class HeroLianPo implements ISkill {
    @Override
    public void doarchery() {
        //无此技能
    }

    @Override
    public void dovertigo() {
        System.out.println("廉颇会眩晕");
    }

    @Override
    public void dofly() {
        System.out.println("廉颇会击飞");
    }
}

接口隔离原则(拆分接口)

射箭:ISkillArchery

package com.qf.principle.interfaceisolation.design;

/**
 * 射箭
 */
public interface ISkillArchery {
    /**
     * 射箭
     */
    void doarchery();

}

击飞:ISkillFly

package com.qf.principle.interfaceisolation.design;
/**
 * 击飞
 */
public interface ISkillFly {
    /**
     * 击飞
     */
    void dofly();
}

眩晕:ISkillVertigo

package com.qf.principle.interfaceisolation.design;
/**
 * 眩晕
 */
public interface ISkillVertigo {

    /**
     * 眩晕
     */
    void dovertigo();

}

后羿:HeroHouYi

package com.qf.principle.interfaceisolation.design;

/**
 * 后羿会射箭、眩晕
 */
public class HeroHouYi implements ISkillArchery,ISkillVertigo {
    @Override
    public void doarchery() {
        System.out.println("后羿会射箭");
    }

    @Override
    public void dovertigo() {
        System.out.println("后羿会眩晕");
    }
}

廉颇:HeroLianPo

package com.qf.principle.interfaceisolation.design;

/**
 * 廉颇会击飞、眩晕
 */
public class HeroLianPo implements  ISkillVertigo,ISkillFly{

    @Override
    public void dofly() {
        System.out.println("廉颇会击飞");
    }

    @Override
    public void dovertigo() {
        System.out.println("廉颇会眩晕");
    }
}

UML关系图

以后羿为例:

未遵守接口隔离原则
在这里插入图片描述
遵守接口隔离原则后
在这里插入图片描述
总结:
接口在设计的时候,要考虑到它的普适性,根据实际应用场景设计出最普适性的接口

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

舒克日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值