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

假设我们现有一个对外接口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. ASP.NET Aries 高级开发教程:Excel导入配置之规则说明(下)
  2. Nature Protocols | 密歇根州立大学何胜阳/Tiedje团队建立拟南芥微生物组研究的标准化生长体系!...
  3. 机器学习笔记十四:随机森林
  4. 【BZOJ】1726 [Usaco2006 Nov]Roadblocks第二短路
  5. hdu 1861-游船出租
  6. Windows Mobile的一些网站和资源(由网友搜集 我整理了一下)
  7. nginx 1.9.9 Linux 环境安装
  8. 百度ueditor修改默认字体和大小
  9. tensorflow随笔——C++工程化
  10. JavaWeb房屋租赁管理系统(servlet+jsp+mysql)
  11. (Word论文插入高清图片)软件设置教程
  12. 多行文字cad提取数据_利用CAD自带的数据提取功能手动提取假表格至Excel
  13. 【秘密】我经历过的币圈天使融资,了解一下
  14. 超强总结,用心分享丨大数据超神之路(三):Linux必备知识
  15. 绝了,项目内部源码资源被爆出!网友:请收下我的膝盖!
  16. Python下opencv使用笔记(二)(简单几何图像绘制)
  17. 两个主要问题将决定微信支付成败
  18. DWD层 (用户行为日志)
  19. [OS-Linux] CentOS 7.x 安全登录策略设置
  20. php环境扩展安装流程

热门文章

  1. win10下的msys2开发环境搭建
  2. 开发一款系统软件的流程步骤是什么
  3. pjsip学习 ------ 二
  4. Java语言,什么是Java语言?Java的版本。
  5. C语言:优先级与运算符的介绍
  6. 计算机数据库管理技术论文的结论,计算机数据库论文范文.doc
  7. Spring Cloud Contract 初识之一 :简介
  8. Python字典用法大全Dict
  9. 阻塞、非阻塞,同步、异步
  10. Box2D和Chipmunk