java 中facade_Java设计模式之Facade模式
GOF《设计模式》一书对Facade模式是这样描述的:
为子系统中的一组接口提供一个统一接口。Facade模式定义了一个更高层的接口,使子系统更加容易使用。
大致意思是说:使用一种比原有方式更简单的办法与系统交互。例如,我们把一个很文件的文件,放在了第二抽屉里,而第二个抽屉的钥匙放在了第一个抽屉里,我们要想取出这个文件,第一步肯定要拿到第一个抽屉的钥匙,然后打开它再拿出第二个抽屉的钥匙,最后打开第二个抽屉取出文件。
我就上面说的那个情形写一下实现代码,首先我们要实现二个子系统,呵呵,把抽屉比喻成系统,有点夸张了(DrawerOne、DrawerTwo):
classDrawerOne {
publicvoidopen(){
System.out.println("第一个抽屉被打开了");
getKey();
}
publicvoidgetKey(){
System.out.println("得到第二个抽屉的钥匙");
}
}
classDrawerTwo{
publicvoidopen(){
System.out.println("第二个抽屉被打开了");
getFile();
}
publicvoidgetFile(){
System.out.println("得到这个重要文件");
}
}
publicclassClient{
publicstaticvoidmain(String []args){
DrawerOne darwerOne=newDrawerOne();
DrawerTwo darwerTwo=newDrawerTwo();
darwerOne.open();
darwerTwo.open();
}
}
由于没有使用Façade模式,可以看到要想得到这个文件要首先打开第一个抽屉,然后再打开第二个抽屉,在我们实际所开发的系统中,有时候客户要实现某一操作,并不需要知道实现这一操作的详细步骤,而是简单地点击某一个按钮就可以得到自己想要的结果。下面对上面的代码使用Façade模式进行改进,建立一个FacadeDrawer类:
classDrawerFacade{
DrawerOnedarwerOne=newDrawerOne();
DrawerTwodarwerTwo=newDrawerTwo();
publicvoidopen(){
darwerOne.open();
darwerTwo.open();
}
}
修改Client类:
publicclassDrawerClient{
publicstaticvoidmain(String []args){
DrawerFacade drawer=newDrawerFacade();
drawer.open();
}
}
输出结果如下:
第一个抽屉被打开了
得到第二个抽屉的钥匙
第二个抽屉被打开了
得到这个重要文件
正如上面所说,客户端client,它并不需要关心子系统,而是关心DrawerFacade所留下来的和外部交互的接口,而子系统在DrawerFacade的聚合。
以上只是个人拙见,哪里有不正确的地方,希望大家多多批评指正。^_^
Facade模式主要适用于以下几种情况:
1)不需要使用一个复杂系统的所有功能,而且可以创建一个新的类,包含访问系统的所有规则。如果只需要使用系统的部分功能,那么你为新类所创建的API将比原系统的API简单的多。
2)希望封装或者隐藏系统原系统。
3)希望使用原系统的功能,而且还希望增加一些新的功能。
4)编写新类的成本小于所有人学会使用或者未来维护原系统上所需的成本。
java 中facade_Java设计模式之Facade模式相关推荐
- Java中的设计模式:“代理模式”的理解
代理模式定义: 为其他对象提供一种代理以控制对这个对象的访问.在面向对象中,有时候直接访问一些对象比较麻烦,所以代理模式就是在这个对象上加上一个访问该对象的访问层.类似于很多明星的事务实际都是交给经纪 ...
- facade java_Java设计模式之Facade模式
Java设计模式之Facade模式 GOF<设计模式>一书对Facade模式是这样描述的: 为子系统中的一组接口提供一个统一接口.Facade模式定义了一个更高层的接口,使子系统更加容易 ...
- java复习系列[5] - Java 中的设计模式
文章目录 Java中的设计模式 设计原则 迭代器模式 + Iterator 适配器模式 + HandlerAdapter 代理模式 + AOP 单例模式 + Spring Bean 模板方法模式 + ...
- JAVA 中的设计模式(一)
JAVA 中的设计模式(一) 1.1.创建型模式(5种) 1.1.1.单列模式:在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在.这样的模式有几个好处: 1.某些类创建比较频繁, ...
- [Head First设计模式]山西面馆中的设计模式——装饰者模式
原文:[Head First设计模式]山西面馆中的设计模式--装饰者模式 引言 在山西面馆吃鸡蛋面的时候突然想起装饰者这个模式,觉得面馆这个场景跟书中的星巴兹咖啡的场景很像,边吃边思考装饰者模式.这里 ...
- 在 Java 中应用设计模式 - Factory Method
基本概念 FactoryMethod是一种创建性模式,它定义了一个创建对象的接口,但是却让子类来决定具体实例化哪一个类.当一个类无法预料要创建哪种类的对象或是一个类需要由子类来指定创建的对象时我们就需 ...
- 理解各种设计模式原则及区别丨浅谈Nginx中核心设计模式-责任链模式丨C++后端开发丨Linux服务器开发丨web服务器
理解各种设计模式原则及区别丨浅谈Nginx中核心设计模式-责任链模式 1. 开闭.单一职责.里氏替换.接口隔离等设计原则 2. 随处可见的模板方法 3. nginx中核心设计模式 责任链模式 4. 责 ...
- java中策略设计模式_Java中的设计模式(五):策略模式
策略设计模式是行为设计模式之一.当我们为特定任务使用多个算法时,使用策略模式,客户端决定在运行时使用的实际实现. 策略模式的最佳示例之一是Collections.sort()采用Comparator参 ...
- 设计模式:Facade模式
Facade模式--简单窗口 当调用大型程序进行处理时,我们需要格外注意那些数量庞大的类之间错综复杂的关系.不过有一种更简单的做法,就是为这个大型程序提供一个"窗口".这样,我们就 ...
- 详解 Java 中的三种代理模式
代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 这里使用 ...
最新文章
- 总线的数据传输类型(微机接口技术)
- Powershell指令集_2
- C# 泛型可能导致的装箱操作陷阱
- [LeetCode] Linked List Cycle
- python中add_Python add()函数是如何使用呢?
- angular2 路由ajax,如何通过Javascript函数在Angular 2中实现AJAX
- maven命令mvn package指定jar包名称
- [LeetCode]题解(python):012-Integer to Roman
- 数据结构笔记(七)-- 顺序栈
- SQL Server 2012大数据导入Oracle的解决方案
- excel2016打开后空白不显示内容的解决办法
- 计算机专业课堂教学,计算机专业网络与课堂教学整合
- python 读取zip包中的数据
- 虚幻引擎(12)-游戏界面
- Java学习笔记系列-入门篇-计算机基础
- 【Android 音视频开发-音视频硬解码篇】1.音视频基础知识
- 2021年凤翔中学高考成绩查询,宝鸡高中学校实力排名,2021年宝鸡所有的高中分数线排名...
- Games104 Lecture 12 游戏引擎中的粒子和声效系统
- 阿里巴巴惠普_阿里巴巴UCAN设计课程学习笔记
- matlab saveas使用报错:错误使用 matlab.graphics.internal.name (line 101)
热门文章
- 基于matlab的负反馈仿真,MATLAB的单闭环转速负反馈直流调速系统仿真
- 条码打印二 - 1.ZebraDesigner软件生成ZPL指令
- IXDC2018国际体验设计大会精华汇总,微软、阿里巴巴、小米、Adobe等大咖都说了啥?...
- 消息称微软Windows暂停接受华为新订单;2019 Q1 亚太区公有云IaaS、PaaS服务收入排名现已揭晓……...
- 完整安装minidwep-gtk教程
- 屏幕真伪测试软件,如何检测电视屏幕真伪4K、坏点漏光?两款工具一键识别!...
- 计算机流程图代表判断的是什么意思,算法流程图符号含义有哪些?用奇偶数判断算法流程图理解...
- multisim14安装后怎么汉化(超详解)
- JMP系列-基础操作(一)
- 永洪BI在 Linux/Unix 下 jdk 环境如何配置?