Android重拾设计模式系列——外观模式
个人博客CoorChice,https://chenbingx.github.io/ ,最新文章将会首发CoorChice的博客,欢迎探索哦 !
同时,搜索微信公众号CoorChice
,或扫描文章末尾二维码,可以关注我的微信公众号。同期文章也将会优先推送到微信公众号中,以提醒您有新鲜文章出炉。
定义及实质
- 定义
为子系统中的一组接口提供一个一致的界面,这个界面使得子系统更加容易使用。
解释:英雄吹响号角(相当于统一界面,用于发动攻击),命令部队对敌军发动攻击;接下来部队里的各种兵种开始对敌军发动攻击。咕噜兵发起了攻击,狼骑发起了攻击,牛头人发起了攻击,风骑士发起了攻击...号角这个统一界面,把部队发起攻击的事件进行了封装,使得英雄不用去了解发起攻击时,部队中的每个兵种是如何发起攻击的。
- 实质
封装交互,简化调用。
模式图解
外观模式UML图
从上图可以看出:
- Facade作为外观类,它提供一个test() 方法入口,供CLient客户端调用子系统功能;
- 可以看到Facade依赖了子系统中所有类,因为它要负责调度它们;Facade其实就是把子系统的功能封装起来,这样使得Client仅仅通过一个test() 方法就能使用子系统。
来看看代码:
功能模块的代码:
//A功能模块 public interface AMoudleApi{ void testA(); } public class AMoudle implements AMoudleApi{ public void testA(){ System.out.println("AMoudle"); } } //B功能模块 public interface BMoudleApi{ void testB(); } public class BMoudle implements BMoudleApi{ public void testB(){ System.out.println("BMoudle"); } } //A功能模块 public interface CMoudleApi{ void testC(); } public class CMoudle implements CMoudleApi{ public void testC(){ System.out.println("CMoudle"); } }
Facade外观类:
public class Facade{ private AMoudleApi aMoudle; private BMoudleApi bMoudle; private CMoudleApi cMoudle; public Facade{ aMoudle = new AMoudle(); bMoudle = new BMoudle(); cMoudle = new CMoudle(); } public void test(){ aMoudle.testA(); bMoudle.testB(); cMoudle.testC(); } }
下面看看Client客户端是如何使用的:
public class Client{ private Facade facade; public static void main(String[] args){ facade = new Facade() facade.test(); //调用Facade的test()方法就能调用到上面所有功能模块,而不用依赖它们 } }
外观模式顺序图
结合上面的代码看这个过程图。
模式优缺点
优势
- 松散耦合,使客户端和子系统解耦,似的扩展更容易进行;
- 简单易用;
- 更好的划分访问层次。
缺点
- 使用不合理容易让人不明白是调用Facade接口好,还是直接调用子系统功能接口好。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Android重拾设计模式系列——适配器模式
个人博客CoorChice,https://chenbingx.github.io/ ,最新文章将会首发CoorChice的博客,欢迎探索哦 ! 同时,搜索微信公众号CoorChice,或扫描文章末尾二维码,可以关注我的微信公众号。同期文章也将会优先推送到微信公众号中,以提醒您有新鲜文章出炉。 封面-设计模式.png 定义及实质 定义 将一个类的接口转换为客户希望的另一个接口,适配器模式使原本由于接口不兼容不能一起工作的类,可以在一起工作。 实质 类型转换,功能复用。 比较抽象,往下继续看看。 模式图解 对象适配器 解释: 现在有一个单手剑(现有接口),但英雄只能装备法杖(目标接口)。所以需要定义一个单手剑转换器(适配器),把法杖插进去,它属于单手剑系列,但内部其实是一根法杖(持有现有接口)!当英雄使用单手剑转化器时,实际使用的是法杖。 对象适配器模式UML图 对象适配器模式UML图 从上图可以看出: Target接口为Client客户端所要求的接口; Adapter是适配器,实现了Target接口,持有Adaptee(原始类型,通常它与Client不兼容,但Client又想要使用它的...
- 下一篇
Android重拾设计模式——生成器模式
个人博客CoorChice,https://chenbingx.github.io/ ,最新文章将会首发CoorChice的博客,欢迎探索哦 ! 同时,搜索微信公众号CoorChice,或扫描文章末尾二维码,可以关注我的微信公众号。同期文章也将会优先推送到微信公众号中,以提醒您有新鲜文章出炉。 封面-设计模式.png 定义及实质 定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 实质 分离整体构建算法和部件构造。 解释: 打魔兽的时候,玩家就相当于Director指导者,兵营就相当于Builder生成器,而Product产品就是各种兵。玩家指导兵营生产不同的兵种,玩家可以通过自己的一些思考(构建算法)决定什么兵生产几个,开始或终止生产,而兵营只负责去构建这些兵种,并且对玩家暴露驱动生产的接口。 模式图解 生成器模式UML图 生成器模式UML图 从上图可以看出: Director指导者,它拥有Builder构建者,负责实现构建算法,在适合的时候调用Builder创建部件或产品,并且具备配置Builder参数的能力,以便能够动态的创建符合要求的部件或产品; ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS关闭SELinux安全模块
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Docker使用Oracle官方镜像安装(12C,18C,19C)