【设计模式】结构型03外观模式(Facade Pattern)

【Java设计模式】Java设计模式之(二十二)外观模式(Facade Pattern) 这种类型的设计模式属于结构型模式。 一、组合模式介绍 1.1 含义 外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。 这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。 在日常编码工作中,我们都在有意无意的大量使用外观模式。只要是上层模块需要调度多个子系统(2个以上的类对象),我们都会自觉地创建一个新的类封装这些子系统,提供 阅读详情

【设计模式】结构型02装饰模式(Decorator Pattern)

意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。

何时使用:1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。2、定义系统的入口。

如何解决:客户端不与系统耦合,外观类与系统耦合。


代码:

1、我这里有一个服务接口,持有一个对外提供服务的共有方法 provide(),本接口有三个实现类,分别是音乐窗口、视频窗口和学习窗口类:

package com.pat.facade;
/**
 * 外观模式,被统筹类的接口
 * @author ZX
 */
public interface ServiceWindows {
	//提供服务的方法
	void provide();
}
/**
 * 音乐播放器接口
 * @author ZX
 *
 */
class Music implements ServiceWindows{
	@Override
	public void provide() {
		System.out.println("播放音乐~我的滑板鞋~滑板鞋~鞋~");
	}
	
}
/**
 * 视频播放器接口
 * @author ZX
 *
 */
class Video implements ServiceWindows{
	@Override
	public void provide() {
		System.out.println("播放视频~非洲农业不发达~就用金坷垃~~~");
	}
	
}
/**
 * 学习资料接口
 * @author ZX
 */
class Study implements ServiceWindows{
	@Override
	public void provide() {
		System.out.println("学习资料.zip》重命名 学习资料.avi");
		System.out.println("开始播放:学习资料.avi");
	}
	
}

2、外观模式核心,提供一个面板类阻止对象,本类就是外观模式的核心:

package com.pat.facade;
/**
 * 外观模式核心-更高层的和新接口控制器,至于对象的创建可使用任何方式,这里采用最简单的方式
 * @author ZX
 *
 */
public class FacadeController {
	private ServiceWindows music;
	private ServiceWindows video;
	private ServiceWindows studyData;
	
	public FacadeController() {
		this.music = new Music();
		this.video= new Video();
		this.studyData= new Study();
	}
	
	
    public void playMusic() {
    	music.provide();
    }
    public void playVideo() {
    	video.provide();
    }
    public void beginStudy() {
    	studyData.provide();
    }
}

3、测试类:

package com.pat.facade;
/**
 * 测试类
 * @author ZX
 *
 */
public class Test {
	public static void main(String[] args) {
		FacadeController fc = new  FacadeController();
		fc.playMusic();
		fc.playVideo();
		fc.beginStudy();
	}
}

4、结果:

播放音乐~我的滑板鞋~滑板鞋~鞋~
播放视频~非洲农业不发达~就用金坷垃~~~
学习资料.zip》重命名 学习资料.avi
开始播放:学习资料.avi

在idea 中添加和删除模块Module操作 主要介绍了在idea 中添加和删除模块Module操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 立即下载

相关推荐

破译丰田BEAN总线之谜

我对CAN的深入了解并不是从CAN本身开始的,而是起源于丰田公司自主研发的BEAN总线。由于BEAN总线协议并不是公开的,而是一种技术机密,所以当丰田车不在使用BEAN总线两年多后的今天,虽然这里还不敢公开技术细节,但回想起当年的作品,随便写写也算对自己的努力有所交代。   南方都市报惠州版曾经报道过一则新闻,说的是丰田皇冠车被盗率非常高。其实两年前就已经知道了皇冠车的防盗系数很低,所以当时的首

粤嵌 5263

working directory设置及不同选项区别

编码过程中会看到如下代码 System.getProperty(“user.dir”) user.dir为JVM启动时通过执行本地方法自动初始化的参数,表示用户当前工作目录(路径)。 在多module下,应用idea执行相同代码获取的是父项目的目录还是模块的工作目录,在idea中可通过编辑configurations进行指定。 不同工作目录含义 为空时:根项目目录 MODULE_DIR:模块目录 MODULE_WORKING_DIR:模块工作目录 MAVEN_REPOSITORY:maven仓库目录 KO

A_xiaopihai的博客 3016

Xarray实战:从气象数据到可视化分析的完整流程(附Python代码)

本文详细介绍了使用Xarray库处理气象数据的完整实战流程。针对气象领域常见的NetCDF和GRIB格式,文章从数据读取、坐标操作、智能索引、统计计算到高级可视化,提供了完整的Python代码示例。重点阐述了Xarray如何高效处理高维标记数据,帮助地球科学领域的研究人员将繁琐的数据处理工作转化为高效的分析流水线。

d6e7f8g9h的博客 290

IDEA更改默认的Working directory(工作目录)

 继上篇博客,解决了运行程序找不到工作目录的问题,可当运行下一个新的程序的时候,依然报同样的错误…查了下资料,更改Working directory分成两个部分,一个是当前应用的,一个是默认的(ε=(´ο`*)))唉,吃了英语不好的亏,IDEA是纯英的,好多设置都要查资料)  下面说下如何更改默认的Working directory,也就是工作目录  第一步、找到上方菜单栏的Run选项并打开,选择...

自知者明,知人者智 3万+

傻瓜教程:使用GeoServer发布离线地图服务

一、离线地图下载 离线地图分为两种:一种叫“金字塔瓦片”数据,一种叫“矢量地图数据”。我们看的在线地图比如,百度,谷歌,高德等等网页上的地图,都是金字塔瓦片;另外一种是手机上用来导航的,比如高德地图APP,也可以下载离线地图数据,这个就是矢量的。 卫星影像地图都是金字塔瓦片,无矢量数据。 因此,我们所说的离线地图下载通常都是指离线地图金字塔瓦片数据下载。 离线地图金字塔瓦片搭建的离线地图服务分很多种:一般有WEB方式,TMS、WMTS/WMS等等,不同的应用有不同...

米兰的小码农的博客 1万+

[信号与系统]一阶与二阶连续时间系统和离散时间系统

定义:一阶连续时间系统由一阶线性常系数微分方程描述: dy(t)dt+ay(t)=bx(t) \frac{dy(t)}{dt} + a y(t) = b x(t) dtdy(t)​+ay(t)=bx(t)时间常数:时间常数 τ=1a\tau = \frac{1}{a}τ=a1​ 是系统响应速度的衡量指标。时间常数越小,系统响应越快。冲激响应:一阶系统的冲激响应是指数衰减或增长的形式。例如,对于一个单位冲激输入,响应为: h(t)=bae−at h(t) = \frac{b}{a} e^{-at} h(t)=

Andius的博客 2121

%MODULE_WORKING_DIR%' does not exist

报错: Cannot start process, the working directory 'E:\ch\lucene-project\%MODULE_WORKING_DIR%'' does not exist 解决办法: 调整Junit的相关配置: 将Working directory的值改成“.”(点)即可 ...

Dack的博客 1493

4. PCIe 接口时序

在上一篇中,大致介绍IPcore接口。总的来说接口如下图数据的接收和发送通过transmitTLPinterface和ReceiveTLPinterface。收发数据的时序也只是描述这几个接口的关系。从手册上截取PCIex1的接口时序。

jjinl的专栏 6122

idea 使用相对路径报错:FileNotFoundException

idea默认工作环境目录是当前项目,可以通过Run-->editconfigurations-->working directory配置 $MODULE_WORKING_DIR$命令可以自动定位到当前项目目录。 注意当项目有不同模块(即对应根目录下的子文件夹)时,使用"src\\name.dat"相对路径保存时还是会报错,要用"modulename\\src\\name.dat"。 ...

qq_52612346的博客 3891

uniapp中renderjs实战:手把手教你实现SSE即时通讯(附完整代码)

本文通过一个完整的实战案例,详细讲解了如何在uni-app中使用RenderJS实现SSE即时通讯功能。文章剖析了RenderJS作为Vue视图层强力补充的原理,并提供了包含自动重连、状态管理等健壮性设计的完整代码,帮助开发者突破框架限制,高效集成浏览器原生API。

weixin_29005499的博客 189

使用W5500与外网通信故障解决(MAC地址问题)

在蒲城项目的调试时,AMS500发现一个致命的问题,就是:在局域网跨网段通信时候和中心服务器不能通信,但是在一个HUB下是没有问题的,以前的串口服务器有过类似的问题出现,解决方法说是芯片的问题,结果也不了了之,换了芯片正常。 我们的网络通信芯片选择W5500,其中的MAC地址采用的是CPU的序列号作为Mac地址的问题就出在这,我们在使用的时候MAC地址的第一个必须是偶数,我们忽视了。 现象描...

zxm8513优快云博客 7755

JUnit单元测试%MODULE_WORKING_DIR%' does not exist

【Idea】JUnit单元测试%MODULE_WORKING_DIR%’ does not exist 2018年05月17日 09:49:42 the_fool_ 阅读数:3036 Idea执行单元测试时报错: 上午9:35 Error running ‘MobileMessageImplTest.java’: Cannot start process, the working director...

remzhang的博客 742

11年电赛综合测评——单运放三角波发生器

目录 背景知识科普: 原理:局部负反馈+大环负反馈+积分器 仿真图如下: 背景知识科普: 反馈电路是将放大器输出信号(电压或电流)的一部分或全部,回收到放大器输入端与输入信号进行比较(相加或相减),并用比较所得的有效输入信号去控制输出,这就是放大器的反馈过程。 一、反馈放大器反馈极性的经验分析法—符号法 分析步骤1.在输入端上加上一个“+”或“-”的输入信号,按瞬时极性法标出反馈放大器中各个电极(基极b,集电极c,发射极e)电压的瞬时性。 2.判断经放大和反馈后得到的反馈信号Xf的瞬时极性

沉迷单车的追风少年 9905

设计模式结构型——外观模式

外观模式(Facade Pattern):又叫作门面模式,归属于结构型模式,提供了一个统一的接口,用来访问子系统中的一群接口。外观模式定义了一个高层接口,即为子系统中的一组接口提供一个一致的界面,让子系统更容易使用。外部应用程序不用关心内部子系统的具体细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。外观模式是为了解决类与类之家的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类类之间的耦合度。

tszc95的博客 2059

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

外观模式-Facade Pattern

在现实生活中,常常存在办事较复杂的例子,如办房产证或注册一家公司,有时要同多个部门联系,这时要是有一个综合部门能解决一切手续问题就好了。 软件设计也是这样,当一个系统的功能越来越强,子系统会越来越多,客户对系统的访问也变得越来越复杂。这时如果系统内部发生改变,客户端也要跟着改变,这违背了“开闭原则”,也违背了“迪米特法则”,所以有必要为多个子系统提供一个统一的接口,从而降低系统的耦合度,这就是外观...

心猿意碼 6445

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

转载Java设计模式之外观模式Facade模式

原文地址为:https://blog.youkuaiyun.com/zz_ddup/article/details/80798347 外观模式(Facade Pattern):隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。 何时使用: 1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员...

meihao1203dick的博客 209

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

结构型模式--外观模式【Facade Pattern】

结构型模式–外观模式【Facade Pattern】 外观模式的定义与特点 外观(Facade)模式的定义: 是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。 外观(Facade)模式是“迪米特法则”的典型应用,它有以下主要优点 降低...

thebigdipperbdx的博客 213

设计模式之外观模式(Facade Pattern)

外观模式的定义与特点 外观(Facade)模式的定义:是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。 外观(Facade)模式是“迪米特法则”的典型应用,它有以下主要优点。 降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用...

fakerXuan的博客 345

设计模式-----Facade Pattern

Facade Pattern 在外观模式中,外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模式。 Facade模式角色分析: Facade角色: 是在客户端直接调用的角色,在外观角色中可以知道相关的(一个或者多个)子系统的功能和责任,它将所有从客户端发来的请求委派到相应的子系统去,传递给相应的子系统对象处理; Subsystem cla..

菜鸟专栏 357

设计模式之门面模式(外观模式)

设计模式之门面模式(外观模式)外观模式的定义与特点优点缺点外观模式的结构与实现1. 模式的结构2. 模式的实现外观模式的应用实例外观模式的应用场景外观模式的扩展 在现实生活中,常常存在办事较复杂的例子,如办房产证或注册一家公司,有时要同多个部门联系,这时要是有一个综合部门能解决一切手续问题就好了。 软件设计也是这样,当一个系统的功能越来越强,子系统会越来越多,客户对系统的访问也变得越来越复杂。这时如果系统内部发生改变,客户端也要跟着改变,这违背了“开闭原则”,也违背了“迪米特法则”,所以有必要为多个子系统提

LEO 807

结构型模式 03 外观模式

外观模式 Facade 为子系统中的一组接口提供一个一致的界面 Facade :知道全部子系统的功能与数学,对其组合,方便调用 SubSystem:子系统集合,内部存在一个或多个子系统,子系统不知道Facade的存在。 应用:数据库三层架构 DAO,SERVICE,CLIENT 使用场景 1.设计初期,将不同的层分离 2.开发过程中,各个子系统经过不断重构越来越复杂,让调用者来调用很困难,加上Facade,子系统内部操作全部隐藏,给外部使用的暴露出来,减少类之间的依赖,降低耦合 3.维护大型系统,此系统难

weixin_46147057的博客 145

Golang设计模式——03外观模式

package Facade import "fmt" type CarModel struct { } func NewCarModel() *CarModel { return &CarModel{} } func (c *CarModel) SetModel() { fmt.Println("CarModel - SetModel") } type CarEngine struct { } func NewCarEngine() *CarEngine { return &am

清风 868

【设计模式】(五)外观模式(Facade Pattern)

在现实生活中,常常存在办事较复杂的例子,如办房产证或注册一家公司,有时要同多个部门联系,这时要是有一个综合部门能解决一切手续问题就好了。 软件设计也是这样,当一个系统的功能越来越强,子系统会越来越多,客户对系统的访问也变得越来越复杂。这时如果系统内部发生改变,客户端也要跟着改变,这违背了“开闭原则”,也违背了“迪米特法则”,所以有必要为多个子系统提供一个统一的接口,从而降低系统的耦合度,这就是外观模式的目标。 1. 外观模式的介绍 外观(Facade)模式又叫作门面模式,是一种通过为多个复杂的子系

来日浅谈的博客 441

java设计模式之外观模式(facade pattern)

在现实生活中,常常存在办事较复杂的例子,如办房产证或注册一家公司,有时要同多个部门联系,这时要是有一个综合部门能解决一切手续问题就好了。 软件设计也是这样,当一个系统的功能越来越强,子系统会越来越多,客户对系统的访问也变得越来越复杂。这时如果系统内部发生改变,客户端也要跟着改变,这违背了“开闭原则”,也违背了“迪米特法则”,所以有必要为多个子系统提供一个统一的接口,从而降低系统的耦合度,这就是外观...

heidou_2016的博客 202

十三、外观模式

外观模式

Guardian 163

【Java -- 设计模式】外观模式(Facade Pattern)

外观(Facade)模式又叫作门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。...

Kevin Learn Android 592
上一篇: 【设计模式】结构型02装饰模式(Decorator Pattern)
下一篇: 【设计模式】结构型04桥接模式(Bridge Pattern)
「已注销」
博客等级 码龄11年 199粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值