type
status
date
slug
summary
tags
category
icon
password

一、设计模式的规范

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

二、接口隔离原则

定义:接口应尽量把大的接口设计为更小更具体的接口,设计为普适性,让接口中只包含了用户感兴趣的方法
notion image

三、示例

模拟场景: 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关系图

以后羿为例:
未遵守接口隔离原则
notion image
遵守接口隔离原则后
notion image
总结: 接口在设计的时候,要考虑到它的普适性,根据实际应用场景设计出最普适性的接口
 
JAVA【设计模式】迪⽶特原则JAVA【设计模式】依赖倒置原则