外观模式思想

  历史上牛人中成功逆袭,实现人生辉煌的人很多,这群人最耀眼的无疑是明太祖朱元璋,从一个放牛讨饭的最低层小屌丝逆袭到人类权力顶峰开国皇帝,确实是我等膜拜的对象。在发不断的发展过程中,其实就在利用外观模式的这个思想,接下来我们就娓娓道来。

  朱元璋同学为了吃饭问题造反,开始是小兵一枚,但是造反很用心,很快被提升到了九人长。这个时候他开始展示管理智慧,由于就是九个人,所以朱元璋对这九个人吃多少拉多少可谓了如指掌。

  朱同学造反砍人很厉害,很快就成了将军。下手有了几千人,他不可能对每个人就亲自管理 。于是就把这些人分别分给了他的亲密小伙伴徐达、常遇春、冯胜、李善长等人。让下面的人的归这几个人管理。下面小兵有了事情就分别找自己的头,不能再去找老大朱元璋了。而这几个头头在把事情总结下来,写个简章让朱元璋老大了解。

  要给敌人干仗了。就找来李善长,让其好好准备粮草、马匹;’找来徐达让其正面进攻;找来常遇春,让其偷袭;找来冯胜,让其接应。具体他们的任务怎么完成,朱老大不太关心,你把我给你的任务好好完成就好了。想想如果这时候要是把士兵一个一个找来分配,只怕任务没有分配完,就被对方给消灭赶紧了。

  好了介绍到这里,外观模式的例子就很好的体现出来了。就是把相近的目标的类封装起来,客户想要这些功能了不用去一个一个了解调用。直接调用封装接口就好了。具体封装的里面怎么工作,调用方并不关心。这样使得做起来方面高效。

  接下来就看看外观模式的定义:为子系统中的一组接口提供一个一致的界面或者高层接口,使得这个子系统使用起来更加方面,高效。 给出一个直观的图形来看下这个模式。

  上面这个图形把这个模式很直观很形象的展示了出来。这个模式理解起来非常的容易。下面用简单展示一下模式的代码。

  1. public class ModuleA {
  2. public void display(){
  3. System.out.println("模块A");
  4. }
  5. }
  6.  
  7. public class ModuleB {
  8. public void display(){
  9. System.out.println("模块B");
  10. }
  11. }
  12.  
  13. public class ModuleC {
  14. public void display(){
  15. System.out.println("模块C");
  16. }
  17. }
  18.  
  19. public class Facade {
  20. private static Facade facade = new Facade();
  21.  
  22. private Facade(){}
  23.  
  24. public static Facade getInstance(){
  25. return facade;
  26. }
  27.  
  28. public void test(){
  29. new ModuleA().display();
  30. new ModuleB().display();
  31. new ModuleC().display();
  32. }
  33. }
  34.  
  35. public class Client {
  36. public static void main(String[] args) {
  37. Facade.getInstance().test();
  38. }
  39. }
  40.  
  41. /*************************************************************************/

模块A
模块B
模块C

  1.  

适用场合

  1、一个子系统往往需要很多模块组成,为了更好的子系统被使用,需要设置一个统一对外的接口。也就是适合使用外观模式

  2、客户程序与抽象类的实现部分之间存在着很大的依赖性。引入 f a c a d e将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。

  3、创建一个有层次的子系统时,也可以使用这个模式。

优势

  1、使得子系统和外部的调用类降低依赖,实现松耦合

  2、子系统内部调整算法不影响外部的调用代码。

  3、使得对子系统的调用更加的高效,方便。

设计模式之(十三)外观模式(Facade)的更多相关文章

  1. 设计模式系列之外观模式(Facade Pattern)——提供统一的入口

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

  2. 设计模式学习心得<外观模式 Facade>

    外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性. 这种模式涉及 ...

  3. IOS设计模式浅析之外观模式(Facade)

    引言 在项目开发中,有时候会遇到这样的一种情景:已有系统的各个子系统之间,随着业务需求的发展,有了比较紧凑的耦合关系.现在需要利用这些子系统的功能,为移动端提供业务处理.我们该怎么应对这样的业务需求呢 ...

  4. 设计模式之八:外观模式(Facade)

    外观模式: 为子系统中的一系列接口提供了一个统一的界面.外观模式定义了一个高层次的接口以使子系统更加easy使用. Provide a unified interface to a set of in ...

  5. 《JAVA设计模式》之外观模式(Facade)

    在阎宏博士的<JAVA与模式>一书中开头是这样描述门面(Facade)模式的: 门面模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的门面对象进行.门面模式提供一个高层次的接口 ...

  6. 【转】设计模式(九)外观模式Facade(结构型)

    设计模式--外观模式Facade(结构型): 1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性. ...

  7. 设计模式(九)外观模式Facade(结构型)

    设计模式(九)外观模式Facade(结构型) 1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性. ...

  8. 乐在其中设计模式(C#) - 外观模式(Facade Pattern)

    原文:乐在其中设计模式(C#) - 外观模式(Facade Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 外观模式(Facade Pattern) 作者:webabcd 介绍 ...

  9. 设计模式(二)-- 外观模式(Facade)

    设计模式(二) 外观模式(Facade) 为了解决子系统外部的客户端在使用子系统的时候,既能简单地使用这些子系统内部的模块功能,而又不用客户端去与子系统内部的多个模块交互的问题. 为子系统中的一组接口 ...

  10. 8.4 GOF设计模式三: 外观模式 Facade

    GOF设计模式三: 外观模式 Facade  “现有系统”功能强大.复杂,开发“新系统”需要用到其中一部分,但又要增加一部 分新功能,该怎么办?4.1 Facade Pattern: Key Fea ...

随机推荐

  1. 学习CNN系列二:训练过程

    卷积神经网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间精确的数学表达式,只要用已知的模式对卷积神经网络加以训练,网络就具有输入.输出之间映射的 ...

  2. E08【选尺码】I'm looking for size 43

    核心句型 I'm looking for size 43 我想要43号的 场景对话 A:Can I help you?您需要什么? B:Yes,can I try on those shoes,ple ...

  3. 201871010106-丁宣元 《面向对象程序设计(java)》第六—七周学习总结

    201871010106-丁宣元 <面向对象程序设计(java)>第六—七周学习总结 正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu- ...

  4. nginx源码安装与使用

    [root@localhost ~]# yum -y install pcre-devel zlib-devel openssl openssl-devel gcc* [root@localhost ...

  5. Linux简单命令的使用

    1.linux上怎么快速删除一个目录在linux中删除一个目录很简单,很多人还是习惯用rmdir,不过一旦目录非空,就陷入深深的苦恼之中,现在使用rm -rf命令即可解决.直接rm就可以了,不过要加两 ...

  6. [LeetCode] 208. Implement Trie (Prefix Tree) 实现字典树(前缀树)

    Implement a trie with insert, search, and startsWith methods. Example: Trie trie = new Trie(); trie. ...

  7. shell脚本特殊变量($0、$1、$2、 $?、 $# 、$@、 $*)

    $0        Shell本身的文件名$1-$n 添加到Shell的各参数值.$1是第1参数.$2是第2参数…$$        Shell本身的PID(ProcessID) $!         ...

  8. cordova生成签名的APK

    所有的Android应用程序在发布之前都要求用一个证书进行数字签名,anroid系统是不会安装没有进行签名的程序(安全考虑,可以查找相关文档) 签名过程详情见:https://www.cnblogs. ...

  9. CentOS7 配置ip地址

    1.查看网络配置文件 可能因为不同的系统,配置文件都不一样,总体来说,配置文件都是 前缀:ifcfg-eno + 后缀:随机数组成 进入到 /etc/sysconfig/network-scripts ...

  10. Java连载13-整数型字面值的强制转换

    一.注意点 1.大容量不能直接赋值给小容量:大容量转化为小容量需要进行,强制类型转换,强制类型转换需要加上“强制类型转换符”,加上强制类型转换符之后编译通过了但是精度会有有可能损失.所以强制类型转换要 ...