facade java_Java设计模式之Facade模式

Java设计模式之Facade模式  GOF《设计模式》一书对Facade模式是这样描述的:

为子系统中的一组接口提供一个统一接口。Facade模式定义了一个更高层的接口,使子系统更加容易使用。

大致意思是说:使用一种比原有方式更简单的办法与系统交互。例如,我们把一个很重要的文件,放在了第二抽屉里,而第二个抽屉的钥匙放在了第一个

抽屉里,我们要想取出这个文件,第一步肯定要拿到第一个抽屉的钥匙,然后打开它再拿出第二个抽屉的钥匙,最后打开第二个抽屉取出文件。

我就上面说的那个情形写一下实现代码,首先我们要实现二个子系统,呵呵,把抽屉比喻成系统,有点夸张了(DrawerOne、DrawerTwo):

class DrawerOne {

public void open(){

System.out.println("第一个抽屉被打开了");

getKey();

}

public void getKey(){

System.out.println("得到第二个抽屉的钥匙");

}

}

class DrawerTwo{

public void open(){

System.out.println("第二个抽屉被打开了");

getFile();

}

public void getFile(){

System.out.println("得到这个重要文件");

}

}

public class Client{

public static void main(String []args){

DrawerOne darwerOne=new DrawerOne();

DrawerTwo darwerTwo=new DrawerTwo();

darwerOne.open();

darwerTwo.open();

}

}

由于没有使用Facade模式,可以看到要想得到这个文件要首先打开第一个抽屉,然后再打开第二个抽屉,在我们实际所开发的系统中,有时候客户要实

现某一操作,并不需要知道实现这一操作的详细步骤,而是简单地点击某一个按钮就可以得到自己想要的结果。下面对上面的代码使用Facade模式进行改进,

建立一个FacadeDrawer类:

class DrawerFacade{

DrawerOne darwerOne=new DrawerOne();

DrawerTwo darwerTwo=new DrawerTwo();

public void open(){

darwerOne.open();

darwerTwo.open();

}

}

修改Client类:

public class DrawerClient{

public static void main(String []args){

DrawerFacade drawer=new DrawerFacade();

drawer.open();

}

}

输出结果如下:

第一个抽屉被打开了

得到第二个抽屉的钥匙

第二个抽屉被打开了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306163.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在 ASP.NET Core Web API 中以三种方式返回数据

在 ASP.NET Core 中有三种返回 数据 和 HTTP状态码 的方式,最简单的就是直接返回指定的类型实例,如下代码所示:[ApiController][Route("[controller]")]public class WeatherForecastController : ControllerBase{[HttpGet]public …

java io 读取多个对象_Java IO系列(五):读写对象ObjectOutputStream和ObjectInputStream详解...

有必要多看几遍的关于字符和字节,例如文本文件,XML这些都是用字符流来读取和写入。而如RAR,EXE文件,图片等非文本,则用字节流来读取和写入。读写对象,传输对象在Java中很常使用,在javaBean中就经…

Dotnet Core多版本API共存的优雅实现

API升级,新旧版本的API共存,怎么管理呢?一、前言最近,单位APP做了升级,同步的,API也做了升级。升级过程中,出现了一点问题:API升级后,旧API也需要保留,因为有…

java 文件监听器_java7 文件监听器

java7中的文件监听,主要可以监听指定目录下的文件:新建 删除 修改等操作。StandardWatchEventKinds.ENTRY_MODIFY,StandardWatchEventKinds.ENTRY_CREATE,StandardWatchEventKinds.ENTRY_DELETE 这三个事件 被注册到watchService 对象中,之后…

Beetlex之websocket/tls服务压测工具

为了方便压力测试ws服务,Beetlex同样提供相关工具来对ws/wss服务的性能进行测试测试。安装可以访问https://github.com/beetlex-io/TCPBenchmarks 下载最新版本工作,工具可以运行在linux和windows系统,安装完成后通过浏览器访问相关服务进行操…

php判断数组下标,php判断json或者数组格式与给定格式是否一致

开发的时候碰到个问题,我们技术人员规定了录数据的格式,例如:我们的json模板如下:{"sentence":"Martin and Kelvin went to Chengduon holiday. They are ordering in a rest aurant now but cannot read the char…

php 设置excel格式,php 操作excel文件的方法小结

用php生成excel文件的方法,单独就是用的php,注意一下数据的输入方法即可。一、php,不用COM,生成excel文件header("Content-type:application/vnd.ms-excel");header("Content-Disposition:filenametest.xls");echo "…

大学班里80%都去培训班,为什么我没去

背景大四刚开始,各大培训机构就开始到各大高校开始宣传,我们学校也不例外;当时信息与计算科学这专业在我们学校并不景气,有好几次听说:如果我们那届的就职率还不行的话,那很大可能将此专业拿掉;…

织梦手机版list.php,解决织梦一级目录作域名list.php无法跳转到手机站的问题

最近测试了www.doweb8.com/m/list.php?tid1 在手机站访问的时候,无法跳转到手机的模板,终于找到了解决了方法,给大家分享一下修改根目录下的m/list.php文件重新弄的代码, 不区分几级目录,理论是根据你指定的PC&#…

如何在 C# 中使用 Buffer

缓冲区 是内存中的一组字节序列,缓冲 是用来处理落在内存中的数据,.NET 缓冲 指的是处理 非托管内存 中的数据,用 byte[] 来表示。当你想把数据写入到内存或者你想处理非托管内存中的数据,可以使用 .NET 提供的 System.Buffer类&a…

php强制对齐,[强迫症福利] 使用 PHPStorm 对齐数组的键值对

用 php-cs-fixer 自动格式化,一个配置配合 Git 自动格式化,补充楼上。示例 Git Hook忽略前端的代码格式化,修改一下就可以用。#!/bin/bash## check PHP code syntax error and standard with phpcs# https://blog.csdn.net/xsgnzb/article/de…

.NET SDK-Style 项目(Core、Standard、.NET5)中的版本号

.NET SDK-Style 项目(Core、Standard、.NET5)中的版本号独立观察员 2020 年 12 月 24 日之前 .NET Framework 时,项目版本号等信息是存储在 AssemblyInfo.cs 文件中,通过程序集特性进行设置:.NET Core 之后&#xff0c…

ajax php 动态,jQuery+PHP+Ajax实现动态数字统计展示功能

jQueryPHPAjax实现的一款动态数字统计展示实例,本例是在页面上动态展示了当前在线用户数,当然了,你可以应用到其他更多场景中。首先我们在#number放置要统计的数字:当前在线:然后我们要定义一个动画过程,使…

[Stardust]星尘分布式全链路监控

随着业务的发展,微服务系统会变得越来越大,各个服务之间的调用关系也会日趋复杂。一个WebApi请求,后方可能经历多个微服务以及数据库和MQ操作,在这个调用过程中,可能因为某一个服务节点出现延迟或者失败,而…

php去掉查询返回的字段序列,php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回...

array_slice()定义和用法array_slice() 函数在数组中根据条件取出一段值,并返回。注释:如果数组有字符串键,所返回的数组将保留键名。(参见例子 4)语法array_slice(array,offset,length,preserve)参数 描述array 必需。规定输入的数组。offse…

如何在 C# 中使用 const,readonly,static

平时在开发时经常会用到 const,readonly,static 关键字,可以肯定这些关键词是完全不同的概念,但有时候他们在用法上很相似以至于在场景中不知道选择哪一个,这篇文章我们就来讨论 C# 中的 const,static 和 readonly 关键词&#xf…

php html asp .net iis tomcat,iis+apache+tomcat 整合共享80口 支持ASP .NET JSP PHP全能WEB服务...

文件目录说明:[apache-tomcat-6.0.37-windows-x86] tomcat 安装版与解压版文件[httpd-2.2] apache安装文件[java] jdk与jre安装文件[mysql] mysql与mysql-tool安装文件[php-5.2.14-Win32] php解压文件[tomcat-connectors-1.2.14-isapi-iis-6.0] isapi模块安装文件[t…

2020,你收获了什么?又失去了什么?

这是头哥侃码的第228篇原创今天是圣诞节,既魔幻又真实的2020年,还有6天就要结束了。每年的年末,我都习惯在下班途中,把头靠在地铁车厢两侧的扶手上,闭上眼睛开始思考自己过去一年的收获与得失,并把这些思绪…

2019龙少php泛站群,龙少php泛站群|PHP版站群 全自动泛解析站群程序 赠送教程

首先将准备建站的域名设置泛解析如baidu.com泛解析为 添加A记录为 *.baidu.com然后在iis里添加空头主机不能设置 汉字目录keywords.txt 关键字,一行一个domain.txt 域名,一行一个,*代表随机muban.html 模板文件,可以修改缓存在dat…

轻量级消息队列RedisQueue

消息队列(Message Queue)是分布式系统必不可少的中间件,大部分消息队列产品(如RocketMQ/RabbitMQ/Kafka等)要求团队有比较强的技术实力,不适用于中小团队,并且对.NET技术的支持力度不够。而Redi…