定义
一个类对于另一个类的依赖应该建立在最小的接口上。
要求程序员尽量将臃肿庞大的接口拆分为更小和更具体的接口,让接口只包含客户感兴趣的。
模拟场景
模拟王者荣耀中英雄的技能,没个英雄有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("廉颇的眩晕技能");
}
}
总结
接口隔离原则虽然看似简单,但如果想在实际项目开发中,将各模块、功能规划的井井有条,运用的炉火纯青、恰到好处,真的很难。反复阅读,仔细体会。