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关系图
以后羿为例:
未遵守接口隔离原则
遵守接口隔离原则后
总结:
接口在设计的时候,要考虑到它的普适性,根据实际应用场景设计出最普适性的接口