接口隔离原则 (2)

接下来介绍儿子的运营模式。儿子提倡的是每个工人职责分明,只负责一个事情,在这种情况下,如果还是用老父亲的 Work 接口会有什么问题呢?上面我们说了,李大姨扎辫子快,王大妈穿衣服快,所以李大姨被分配去给布娃娃扎辫子,王大妈被分配去给布娃娃穿衣服。我们沿用老父亲的 Work 接口实现,代码如下

class WangMather2 implements Work{ @Override public void hairBraiding() { } @Override public void getDressed() { System.out.println("王大妈给布娃娃穿衣服"); } @Override public void packingIntoTheBox() { } @Override public void makeTag() { } } class LiAunt2 implements Work { @Override public void hairBraiding() { System.out.println("李大姨给布娃娃扎辫子"); } @Override public void getDressed() { } @Override public void packingIntoTheBox() { } @Override public void makeTag() { } }

看出问题来了么?李大姨仅仅参与扎辫子工作,王大妈参与了穿衣服工作,但是却都要依旧实现其他 3 个多余的接口。所以在儿子的运营模式下,老父亲的 Work 接口需要重新分配,以工序的角度分配,而不是以完成一个布娃娃的角度分配。总共有 4 个工序:扎辫子、穿衣服、包装入箱、打标签,我们需要定义 4 个接口,让员工去实现各自负责的工序接口。代码如下

interface Hair { void hairBraiding(); } interface Dress { void getDressed(); } interface Box { void packingIntoTheBox(); } interface Tag { void makeTag(); } /** * 李大姨给布娃娃扎辫子快 */ class LiAunt3 implements Hair { @Override public void hairBraiding() { System.out.println("李大姨给布娃娃扎辫子"); } } /** * 王大妈给布娃娃穿衣服快 */ class WangMather3 implements Dress{ @Override public void getDressed() { System.out.println("王大妈给布娃娃穿衣服"); } } /** * 陈大叔包装快 */ class ChenUncle implements Box { @Override public void packingIntoTheBox() { System.out.println("陈大叔给布娃娃装箱"); } } /** * 黄大姐贴标签快 */ class HuangSister implements Tag { @Override public void makeTag() { System.out.println("黄大姐给箱子打标签"); } } // 测试代码 LiAunt3 liAunt3 = new LiAunt3(); WangMather3 wangMather3 = new WangMather3(); ChenUncle chenUncle = new ChenUncle(); HuangSister huangSister = new HuangSister(); liAunt3.hairBraiding(); wangMather3.getDressed(); chenUncle.packingIntoTheBox(); huangSister.makeTag();

这段代码看起来就很清晰了,在儿子的运营模式下,大家都是只做一道工序,这样子实现就非常合理。看了这个过程,你理解了接口隔离原则了么?再看一看上面的定义:客户端不应该依赖它不需要的接口。闭上眼睛,静默 3 秒,感受一下。
我们也可以回忆一下在工作中编写的代码,是不是有遵守接口隔离原则?在特定的场景下,如果很多类实现了同一个接口,并且都只实现了接口的极少部分方法,这时候很有可能就是接口隔离性不好,就要去分析能不能把方法拆分到不同的接口。

总结

接口隔离原则最最最重要一点就是要根据实际情况,具体业务具体分析,不能犯了上面说到的错误:在老父亲的运营模式下,按儿子的工序划分接口去实现,那样子会得不偿失。

参考资料:《大话设计模式》、《Java设计模式》、《设计模式之禅》、《研磨设计模式》、《Head First 设计模式》

希望文章对您有所帮助,设计模式系列会持续更新,感兴趣的同学可以关注公众号,第一时间获取文章推送阅读,也可以一起交流,交个朋友。

公众号之设计模式系列文章

公众号

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwxwx.html