也谈设计模式Facade
门面模式提供一个高层次的接口,使得子系统更容易使用。
子系统与外部系统的通信必须经过一个统一的facade进行处理。
内部系统的交互在facade中进行整合,这样,对于外部系统的使用者就不用关注内部系统的复杂性。而有facade的存在也降低了内外系统的耦合。
1.内部系统
1.1 内部子系统1--对茶的操作
package designPattern.facade;
public class TeaDeal {
public void getTea() {
System.out.println("放茶....");
}
public void cookTea() {
System.out.println("煮茶....");
}
}
1.2 内部子系统2--对水的操作
package designPattern.facade;
public class WaterDeal {
public void poulWater() {
System.out.println("倒水....");
}
public void boilWater() {
System.out.println("烧水....");
}
}
2.外部调用
这里面我们将泡茶的流程设定为:放茶→烧水→泡茶,不采用facade模式的时候,我们会这样做
package designPattern.facade;
public class NoFacadeTest {
public static void main(String[] args) {
TeaDeal teaDeal = new TeaDeal();
WaterDeal waterDeal = new WaterDeal();
//泡茶
teaDeal.getTea();
waterDeal.boilWater();
waterDeal.poulWater();
}
}
有了facade,我们会这样做
2.1 创建facade
package designPattern.facade;
public class Facade {
private TeaDeal teaDeal;
private WaterDeal waterDeal;
public Facade() {
this.teaDeal = new TeaDeal();
this.waterDeal = new WaterDeal();
}
public void cookTea(){
System.out.println("这是泡茶流程....");
teaDeal.getTea();
waterDeal.boilWater();
waterDeal.poulWater();
}
public void boilTea(){
System.out.println("这是煮茶流程...");
teaDeal.getTea();
waterDeal.poulWater();
teaDeal.cookTea();
}
}
2.2 外部调用
package designPattern.facade;
public class FacadeTest {
public static void main(String[] args) {
Facade facade = new Facade();
facade.boilTea();
facade.cookTea();
}
}
3.对比分析
在追MM和设计模式这篇神文中,对与facade的形象解释:
我有一个专业的Nikon相机,我就喜欢自己手动调光圈、快门,这样照出来的照片才专业,但MM可不懂这些,教了半天也不会。幸好相机有Facade设计模式,把相机调整到自动档,只要对准目标按快门就行了,一切由相机自动调整,这样MM也可以用这个相机给我拍张照片了。
与上面的示例相对应的,facade提供的方法中也有自动档这个档位(泡茶),MM不用去关注怎么去烧水怎么去倒水,泡茶成了一键式,大大的方便了MM呀。
也谈设计模式Facade的更多相关文章
- [转] 设计模式 -- Facade
PS:Façade模式注重简化接口,Adapter模式注重转换接口,Bridge模式注重分离接口(抽象)与其实现,Decorator模式注重稳定接口的前提下为对象扩展功能. Facade模式 Faca ...
- 外观设计模式 (Facade)
目的:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使 外观设计模式使用场合: 1. 在设计初期阶段,应该有意识的将不同的两个分层.层与层之间建立外观 ...
- 以css为例谈设计模式
什么是设计模式? 曾有人调侃,设计模式是工程师用于跟别人显摆的,显得高大上:也曾有人这么说,不是设计模式没用,是你还没有到能懂它,会用它的时候. 先来看一下比较官方的解释:"设计模式(Des ...
- 设计模式-Facade(结构型模式) 针对 最终类的实现通过一系列类的相关操作,重点关注 起始与结尾的操作。
以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码 //Facade.h #pragma once class Subsystem1 { public: Subsystem1() ...
- 浅谈设计模式-visitor访问者模式
先看一个和visitor无关的案例.假设你现在有一个书架,这个书架有两种操作,1添加书籍2阅读每一本书籍的简介. //书架public class Bookcase { List<Book> ...
- C++设计模式-Facade模式
Facade模式 作用:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 动机 将一个系统划分成为若干个子系统有利于降低系统的复杂性.一 ...
- iOS 趣谈设计模式——通知
[前言介绍] iOS的一种设计模式,观察者Observer模式(也叫发布/订阅,即Publich/Subscribe模式). 观察者模式,包含了通知机制(notification)和KVO(Key-v ...
- 浅谈设计模式--装饰者模式(Decorator Pattern)
挖了设计模式这个坑,得继续填上.继续设计模式之路.这次讨论的模式,是 装饰者模式(Decorator Pattern) 装饰者模式,有时也叫包装者(Wrapper),主要用于静态或动态地为一个特定的对 ...
- 浅谈设计模式--单例模式(Singleton Pattern)
题外话:好久没写blog,做知识归纳整理了.本来设计模式就是个坑,各种文章也写烂了.不过,不是自己写的东西,缺少点知识的存在感.目前还没做到光看即能记住,得写.所以准备跳入设计模式这个大坑. 开篇先贡 ...
随机推荐
- asp.net core mvc视频A:笔记3-5.视图数据共享之TempData
前几节讲的都是单页面数据共享,从本节开始讲跨页面数据共享 创建项目3.5,新建控制器 代码 控制器 设置TempData 另一个视图中读取TempData数据 运行 此时如果刷新页面,页面中的内容“张 ...
- 征信报告页面的input验证收集
https://ipcrs.pbccrc.org.cn/ function checkLoginName() { var loginName = $.trim($("#loginname&q ...
- java.long中的类和方法
java.lang.Character.isUpperCase(char ch) 确定指定的字符是否为大写字符. java.lang.Character.toUpperCase()方法用法转换从Uni ...
- [Erlang危机](5.1.1)内存
原创文章,转载请注明出处:server非业余研究http://blog.csdn.net/erlib 作者Sunface , and some of the hidden data I mention ...
- 常见的C++数学计算库
来源: https://blog.csdn.net/panhao762/article/details/55276811 作为理工科学生,想必有限元分析.数值计算.三维建模.信号处理.性能分析.仿真分 ...
- hdu 4112 Break the Chocolate(乱搞题)
题意:要把一块n*m*k的巧克力分成1*1*1的单元,有两种操作方式:1,用手掰(假设力量无穷大),每次拿起一块,掰成两块小的:2,用刀切(假设刀无限长),可以把多块摆在一起,同时切开.问两种方式各需 ...
- iOS 多网络请求同步并发
iOS中经常会用到多线程,在多线程中有一个线程组的概念(group),创建多个线程组任务,多组任务都完成之后,就会进入dispatch_group_notify队列中. 同时多线程中还有一个信号量的概 ...
- ubuntu openfire Server install
1.首先登录到ubuntu server.在安装openfire 服务器之前,先确保你的系统已经更新到最新.然后输入下面的命令,一行一行执行,最后安装可用的更新 sudo apt-get update ...
- Laravel开发:Laravel初始化简述
二话不说,先从public/index.php撸起 require __DIR__.'/../bootstrap/autoload.php';//Composer 自动加载 $app = requir ...
- c/c++的一些小知识点3
---恢复内容开始--- ---恢复内容结束---