介绍外观模式之前,首先让我们来看下面的例子:

假设我们现有一个对外接口FacadeService,里面有一个对外的方法a();

public interface FacadeService {public void a();//这个方法是给外部调用的
}

他有一个实现类FacadeServiceImpl,他实现了FacadeService接口的a方法,同时又新增了一个自己的供内部调用的方法b;

public class FacadeServiceImpl implements FacadeService {public void a() {System.out.println("这是给外部调用的");}public void b() {System.out.println("这是给内部调用的");}
}

此时我们再模拟外部调用的逻辑

public class FacadeServiceMain {public static void main(String[] args) {FacadeServiceImpl facadeService = new FacadeServiceImpl();facadeService.a();facadeService.b();}
}

因为a是给外部调用用的,此时可以给外部调用,但是b是给内部调用的,我们不希望给外部调用,此时我们可以怎么做呢?有的人说,可以调整b方法的访问权限,使得只能只能同一个包下面的类可以访问,除了这个方法之外还有别的更优雅的方法吗?请看下面的例子:

public class FacadeServiceImplForOut implements FacadeService {private FacadeService facadeService;public FacadeServiceImplForOut(FacadeServiceImpl facadeService){this.facadeService=facadeService;}public void a() {facadeService.a();}}

此时FacadeServer对象是一个私有的对象,他只能在本类访问,同时他实现了FacaseServer接口,提供了能供外部访问的方法a,这样是不是实现了外部只能访问a方法的改造?

public class FacadeServiceMain {public static void main(String[] args) {/* FacadeServiceImpl facadeService = new FacadeServiceImpl();
        facadeService.a();
        facadeService.b();*/

        FacadeServiceImpl facadeService = new FacadeServiceImpl();FacadeServiceImplForOut fout = new FacadeServiceImplForOut(facadeService);fout.a();}
}

这就是facade(外观模式),他提供了一个供外部client调用的层Facade,由Facade层去组织调用真正的业务层,对于调用client来说,真正的业务层对他来说是透明的,这样做的好处是让调用层client和真正的业务层解耦,同时在Facade层也可以做更多的事情,比如上面的屏蔽client不该访问到的方法等等

java设计模式之Facade模式相关推荐

  1. facade java_Java设计模式之Facade模式

    Java设计模式之Facade模式  GOF<设计模式>一书对Facade模式是这样描述的: 为子系统中的一组接口提供一个统一接口.Facade模式定义了一个更高层的接口,使子系统更加容易 ...

  2. Java设计模式分为创建模式, 结构模式, 行为模式 3种类型

    Java设计模式之创建模式包括: Factory,    工厂模式 Singleton,   单例模式 Builder,    建造模式 Prototype,    原型模式 Java设计模式之结构模 ...

  3. Java设计模式 -10- 装饰器模式(Decorator模式)

    Java设计模式 -10- 装饰器模式(Decorator模式) 前言 装饰器模式的定义与特点 优点: 缺点: 装饰器模式的结构与实现 1. 模式的结构 2. 模式的实现 装饰器模式的应用实例 装饰器 ...

  4. java备忘录模式应用场景_图解Java设计模式之备忘录模式

    图解Java设计模式之备忘录模式 游戏角色状态恢复问题 游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状态. ...

  5. Java设计模式之策略模式与状态模式

    一.策略模式定义 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们之间可以相互替换,策略模式可以在不影响客户端的情况下发生变化. 好了,定义看看就完了,我知道你很烦看定义. 二.策 ...

  6. Java设计模式(访问者模式-迭代器模式-观察者模式-中介者模式)

    Java设计模式Ⅶ 1.访问者模式 1.1 访问者模式概述 1.2 代码理解 2.迭代器模式 2.1 迭代器模式概述 2.2 代码理解 3.观察者模式 3.1 观察者模式概述 3.2 代码理解 4.中 ...

  7. Java设计模式(建造者模式-适配器模式-桥接模式)

    Java设计模式Ⅲ 1.建造者模式 1.1 建造者模式概述 1.2 建造者模式的注意事项和细节 1.3 代码理解 2.适配器模式 2.1 类适配器模式 2.1.1 代码理解 2.2 对象适配器模式 2 ...

  8. Java设计模式(工厂模式>抽象工厂模式和原型模式)

    Java设计模式Ⅱ 1.工厂模式 1.1 简单工厂模式 1.2 工厂方法模式 2.抽象工厂模式 3.总结 4.原型模式 4.1 原型模式 4.2 浅拷贝 4.3 深拷贝 5.建造者模式 1.工厂模式 ...

  9. 折腾Java设计模式之建造者模式

    博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ...

最新文章

  1. java 实现约瑟夫环
  2. python的100个案例_Python实例100个(基于最新Python3.7版本)
  3. 在没有任何数据时进行无效的读取尝试。_技术转载——JVM运行时内存是怎么分布的?...
  4. python的flask实现接口_Flask快速实现简单python接口
  5. HBase、Redis、MongoDB、Couchbase、LevelDB主流 NoSQL 数据库的对比
  6. linux安装unzip及使用
  7. positional encoding位置编码详解:绝对位置与相对位置编码对比
  8. php面向对象教学笔记,php学习笔记之面向对象编程
  9. 21.5 英寸 iMac 供应减少:是新品发布的节奏吗?
  10. VSD Viewer for Mac(Visio绘图文件阅读器)
  11. Windows下使用CMD下载网络文件
  12. 用友U8去除凭证外部凭证标记
  13. mac terminal终端快速打开指定文件夹
  14. ht for web(图扑)加载模型
  15. 华为防火墙配置IPSEC实现二个站点间网络互通 隧道模式 CLI配置 (三)
  16. 在centos上安装vmware14
  17. 机电一体化仿真--手爪
  18. LightOJ-1253 Misere Nim
  19. 郭逸淵:4月7日比特幣(BTC)以太坊(ETH)行情分析及布局思路
  20. Android.AsyncTask

热门文章

  1. SpringBoot运行主程序报错:No subdirectories found for mandatory directory location ‘file:./config/*/‘.
  2. Contiki内核原理
  3. oracle any 语法,Oracle:apos;= ANY()apos;与apos;IN()apos; Dovov编程网
  4. 用1:3电流镜恒定GM的输入输出轨到轨运放设计(自用一)
  5. NOI 1797:金银岛(C++)
  6. CF1578F Framing Pictures 旋转卡壳+积分
  7. RAID的基本工作模式
  8. CPU中的八个通用寄存器
  9. 阿里云服务器使用SMTP发送邮件
  10. Android百度地图API使用教程