设计模式--设计原则--接口隔离原则

63 阅读2分钟

定义

一个类对于另一个类的依赖应该建立在最小的接口上。

要求程序员尽量将臃肿庞大的接口拆分为更小和更具体的接口,让接口只包含客户感兴趣的。

模拟场景

模拟王者荣耀中英雄的技能,没个英雄有3个技能

违背原则方法

接口定义

/**
 * @description:英雄技能接口
 * @version: 1.0
 * @Author blackcat
 */
public interface ISkill {
​
    /**
     * 射箭
     */
    void doArchery();
​
    /**
     * 隐袭
     */
    void doInvisible();
​
    /**
     * 沉默
     */
    void doSilent();
​
    /**
     * 眩晕
     */
    void doVertigo();
}
​

英雄后裔

/**
 * @description:英雄-后裔
 * @version: 1.0
 * @create 2022/3/14 7:19
 * @Author blackcat
 */
public class HeroHouYi implements ISkill {
​
    @Override
    public void doArchery() {
        System.out.println("后裔的灼日之矢");
    }
​
    @Override
    public void doInvisible() {
        System.out.println("后裔的隐身技能");
    }
​
    @Override
    public void doSilent() {
        System.out.println("后裔的沉默技能");
    }
​
    @Override
    public void doVertigo() {
        // 无此技能的实现
    }
}
​

英雄廉颇

/**
 * @description:英雄-廉颇
 * @version: 1.0
 * @Author blackcat
 */
public class HeroLianPo implements ISkill{
​
​
    @Override
    public void doArchery() {
        // 无此技能的实现
    }
​
    @Override
    public void doInvisible() {
        System.out.println("廉颇的隐身技能");
    }
​
    @Override
    public void doSilent() {
        System.out.println("廉颇的沉默技能");
    }
​
    @Override
    public void doVertigo() {
        System.out.println("廉颇的眩晕技能");
    }
}
​

接口隔离原则改善代码

接口

/**
 * @description:射箭接口
 * @version: 1.0
 * @Author blackcat
 */
public interface ISkillArchery {
​
    void doArchery();
}
​
/**
 * @description:隐袭
 * @version: 1.0
 * @Author blackcat
 */
public interface ISkillInvisible {
​
​
    void doInvisible();
}
​
​
/**
 * @description:沉默
 * @version: 1.0
 * @Author blackcat
 */
public interface ISkillSilent {
​
    void doSilent();
}
​
/**
 * @description:眩晕
 * @version: 1.0
 * @Author blackcat
 */
public interface ISkillVertigo {
​
    void doVertigo();
}
​

英雄后裔

public class HeroHouYi implements ISkillArchery, ISkillInvisible, ISkillSilent {
​
    @Override
    public void doArchery() {
        System.out.println("后裔的灼日之矢");
    }
​
    @Override
    public void doInvisible() {
        System.out.println("后裔的隐身技能");
    }
​
    @Override
    public void doSilent() {
        System.out.println("后裔的沉默技能");
    }
}
​

英雄廉颇

public class HeroLianPo implements ISkillInvisible, ISkillSilent, ISkillVertigo {
​
    @Override
    public void doInvisible() {
        System.out.println("廉颇的隐身技能");
    }
​
    @Override
    public void doSilent() {
        System.out.println("廉颇的沉默技能");
    }
​
    @Override
    public void doVertigo() {
        System.out.println("廉颇的眩晕技能");
    }
}
​

总结

接口隔离原则虽然看似简单,但如果想在实际项目开发中,将各模块、功能规划的井井有条,运用的炉火纯青、恰到好处,真的很难。反复阅读,仔细体会。