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关系图

以后羿为例:

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

posted @ 2022-08-30 22:40  雾托邦  阅读(80)  评论(0编辑  收藏  举报