颜值10分姐姐带我玩转java设计模式(内附照片)- 门面模式
Posted 浦江之猿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了颜值10分姐姐带我玩转java设计模式(内附照片)- 门面模式相关的知识,希望对你有一定的参考价值。
先不说话,直接来张姐姐照片,称呼包子姐姐即可,希望包子姐姐能带飞。
原创不易,麻烦先三连,再细看,谢谢
示例的源码可以直接通过csdn下载也可以通过git导出:https://github.com/igdnss/java_facade.git
设计模式共有23种,可以分为三大类:创建型模式,结构型模式,行为型模式。学好这三大类,基本可以闯荡整个武林了。
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、门面(外观)模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
本篇就有请包子姐姐带我们一起见识一下结构型模式中的门面模式。
前言
我:包子姐姐,最近一直在看公司的项目,发现有好多地方都有Facade字样,点进去看发现向外提拱的接口好简单,但追到业务层发现还是很复杂。
包子姐姐:不错哦,你看代码一眼就能命中要害。其实你看的代码就是用门面模式将业务逻辑进行了再次封装,使得调用者无须关心其内在的业务实现。
我:咦,原来是这样啊,那烦请姐姐给我们介绍一下这个设计模式。
包子姐姐:当然没问题,姐姐我不仅人长得漂亮,还特别喜欢答读者问。
我:一点不假,我们都认可姐姐的颜值,尤其那个游戏号为黄色教科书的,天天嘴里都挂着姐姐。
包子姐姐:哈哈,那个老色批,不提他了。 在我看来看,门面模式是23种设计模式中最简单的一种设计模式。写代码写个五六年,开始重构代码时建议大家尝试用设计模式来重构,但切记不要强制使用设计模式, 合适的场景下能用则用,这样才能提高自己的编程水平。门面模式就是我重构代码时第一个使用的设计模式。
定义
我:姐姐,那门面模式是如何定义的?
包子姐姐:门面模式隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口,此接口包装了实现系统业务逻辑的若干个接口,算是一个总接口。
我:有点感觉了,那它属于哪一类呢?
包子姐姐:门面模式是将多个接口进行了组合,使得代码的可读性更强,因此它属于结构型设计模式。
我:懂了懂了,姐姐可不可以举一个生活中的例子让门面模式更通俗化。
包子姐姐:哈,这个生活中的例子太多了,例如“黄色教务科书”这个老色批需要去医院做某方面切除手术时,他不需要知道整个流程的细节,他所要做的就是往那一躺,腿张开,后面交给医生处理就行了。可以看下图:
我:姐姐,你对老色批好了解哦。
包子姐姐:哈哈,全世界人都知道,这是他的“特长”,他引以为傲呢。老色批不管其他的,只需要做一个手术就行,后面的细节完全可以不管,也就是说“做手术”这个动作将所有的流程都包装起来了,对外也就只有一个“做手术”的动作。
我:这个例子精典,想必大家一看就能懂。
包子姐姐:下面用代码来实现一下。为了体现门面模式优势,假如老色批有个弟弟,也去做切除手术,但是呢这个人比较傻,什么事都要自己去弄,最终花了好大的精力才切除成功。
示例1:老色批弟弟做手术,非门面模式
public class Anaesthetist {
public void anaesthesia() {
System.out.println("打麻药 ... ");
}
}
public class Disinfector {
public void disinfect(){
System.out.println("消毒 ... ");
}
}
public class Cutter {
public void cut() {
System.out.println("切除 ... ");
}
}
public class Wrapper {
public void wrap() {
System.out.println("包括 ... ");
}
}
public class Brother {
public static void main(String[] args) {
//代码可读性差
Disinfector disinfector = new Disinfector();
Anaesthetist anaesthetist = new Anaesthetist();
Cutter cutter = new Cutter();
Wrapper wrapper = new Wrapper();
disinfector.disinfect();
anaesthetist.anaesthesia();
cutter.cut();
wrapper.wrap();
}
}
包子姐姐:好傻的弟弟。老色批吸取了弟弟的教训,他去做手术的时候比较顺利
示例2:老色批做手术,门面模式
public class MainDoctor {
Disinfector disinfector = new Disinfector();
Anaesthetist anaesthetist = new Anaesthetist();
Cutter cutter = new Cutter();
Wrapper wrapper = new Wrapper();
public void operation() {
disinfector.disinfect();
anaesthetist.anaesthesia();
cutter.cut();
wrapper.wrap();
}
}
public class SeHimself {
public static void main(String[] args) {
//代码可能性高
MainDoctor mainDoctor = new MainDoctor();
mainDoctor.operation();
}
}
包子姐姐:很简单吧,就加了一层包装类,就让代码的可读性瞬间提高,并且调用者使用起来也方便。没错,这就是门面模式,是不是超级简单。
我:哇,真的很简单,老色批得救了。那门面模式有没有什么缺点呢?
包子姐姐:当然有啊,就拿老色批和他弟弟的例子来说吧,老色批的方式明显多了一个业务类,这里代码简单,如果代码复杂的话可能要多很多业务类,但是没关系,这个弊明显小于利,所以don’t care about it .
我: 我在工作中一定要用上,对了,包子姐姐,在什么场景上适合使用门面模式?
使用场景
包子姐姐: 简单来说,门面模式就是把一些复杂的流程封装成一个接口提供给外界使用,使得用户能更简单的调用接口,此模式中包括三个角色:门面角色:外观模式的核心(上文中的MainDoctor),它需要被Client调用,它需要熟悉子系统的功能;子系统角色:实现子系统的功能,它对客户角色是未知的,上文中的Disinfector,Anaesthetist ,Cutter ,Wrapper ;客户角色:通过调用Facade来完成要实现的功能,上文中的SeHimself 。
我:欧克匹克,明白了,以后重构代码时,脑海中想着老色批去做切除手术,然后代码质量就嗖的一下上去了。
结束语
包子姐姐:好了,关于门面模式就介绍完了,很简单,很实用。希望本文能帮助大家,包子姐姐在此祝大家在IT之路上少走弯路,一路绿灯不堵车,测试一性通过,bug秒解!
我:感谢包子姐的细心讲解,很精彩,期待下一个设计模式,也祝包子姐姐越长越漂亮。
以上是关于颜值10分姐姐带我玩转java设计模式(内附照片)- 门面模式的主要内容,如果未能解决你的问题,请参考以下文章