java设计模式之Facade模式
介绍外观模式之前,首先让我们来看下面的例子:
假设我们现有一个对外接口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模式相关推荐
- facade java_Java设计模式之Facade模式
Java设计模式之Facade模式 GOF<设计模式>一书对Facade模式是这样描述的: 为子系统中的一组接口提供一个统一接口.Facade模式定义了一个更高层的接口,使子系统更加容易 ...
- Java设计模式分为创建模式, 结构模式, 行为模式 3种类型
Java设计模式之创建模式包括: Factory, 工厂模式 Singleton, 单例模式 Builder, 建造模式 Prototype, 原型模式 Java设计模式之结构模 ...
- Java设计模式 -10- 装饰器模式(Decorator模式)
Java设计模式 -10- 装饰器模式(Decorator模式) 前言 装饰器模式的定义与特点 优点: 缺点: 装饰器模式的结构与实现 1. 模式的结构 2. 模式的实现 装饰器模式的应用实例 装饰器 ...
- java备忘录模式应用场景_图解Java设计模式之备忘录模式
图解Java设计模式之备忘录模式 游戏角色状态恢复问题 游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状态. ...
- Java设计模式之策略模式与状态模式
一.策略模式定义 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们之间可以相互替换,策略模式可以在不影响客户端的情况下发生变化. 好了,定义看看就完了,我知道你很烦看定义. 二.策 ...
- Java设计模式(访问者模式-迭代器模式-观察者模式-中介者模式)
Java设计模式Ⅶ 1.访问者模式 1.1 访问者模式概述 1.2 代码理解 2.迭代器模式 2.1 迭代器模式概述 2.2 代码理解 3.观察者模式 3.1 观察者模式概述 3.2 代码理解 4.中 ...
- Java设计模式(建造者模式-适配器模式-桥接模式)
Java设计模式Ⅲ 1.建造者模式 1.1 建造者模式概述 1.2 建造者模式的注意事项和细节 1.3 代码理解 2.适配器模式 2.1 类适配器模式 2.1.1 代码理解 2.2 对象适配器模式 2 ...
- Java设计模式(工厂模式>抽象工厂模式和原型模式)
Java设计模式Ⅱ 1.工厂模式 1.1 简单工厂模式 1.2 工厂方法模式 2.抽象工厂模式 3.总结 4.原型模式 4.1 原型模式 4.2 浅拷贝 4.3 深拷贝 5.建造者模式 1.工厂模式 ...
- 折腾Java设计模式之建造者模式
博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ...
最新文章
- ASP.NET Aries 高级开发教程:Excel导入配置之规则说明(下)
- Nature Protocols | 密歇根州立大学何胜阳/Tiedje团队建立拟南芥微生物组研究的标准化生长体系!...
- 机器学习笔记十四:随机森林
- 【BZOJ】1726 [Usaco2006 Nov]Roadblocks第二短路
- hdu 1861-游船出租
- Windows Mobile的一些网站和资源(由网友搜集 我整理了一下)
- nginx 1.9.9 Linux 环境安装
- 百度ueditor修改默认字体和大小
- tensorflow随笔——C++工程化
- JavaWeb房屋租赁管理系统(servlet+jsp+mysql)
- (Word论文插入高清图片)软件设置教程
- 多行文字cad提取数据_利用CAD自带的数据提取功能手动提取假表格至Excel
- 【秘密】我经历过的币圈天使融资,了解一下
- 超强总结,用心分享丨大数据超神之路(三):Linux必备知识
- 绝了,项目内部源码资源被爆出!网友:请收下我的膝盖!
- Python下opencv使用笔记(二)(简单几何图像绘制)
- 两个主要问题将决定微信支付成败
- DWD层 (用户行为日志)
- [OS-Linux] CentOS 7.x 安全登录策略设置
- php环境扩展安装流程