设计模式:10、外观模式

C++ 设计模式10:外观模式   外观模式又称为Facade,为子系统中的一组接口(相当与上面的模块)提供一个一致的界面。此模式定义了一个高层接口,这个结口使得这一子系统更加easy使用。 ​  我们仅仅需调用高层的函数接口。而不用关心高层内部调用是怎样组合底层方法的。更不用关心底层函数是怎样实现的。 ​  例如,我们须要完成两个工作,要完毕工作1我们须要依次完成子工作Sub_Work1、Sub_Work3;要完成工作2我们须要依次完成子工作Sub_Work2,Sub_Work3,Sub_Work4。为了能让用户与这些子工作分离,我们採 阅读详情

目录

0、定义

1、外观模式的两种角色

2、外观模式的UML类图

3、示例代码


0、定义

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

1、外观模式的两种角色

  • 子系统(Subsystem):子系统是若干个类的集合,这些类的实例协同合作为用户提供所需要的功能,子系统中的任何类都不包含外观类的实例引用。
  • 外观(Facade):外观是一个类,该类包含子系统中全部或部分类的实例引用,当用户想要和子系统中的若干个类的实例打交道时,可以代替地和子系统的外观类的实例打交道。

2、外观模式的UML类图

3、示例代码

子系统

package xyz.jangle.design.facade;

public class ClassA {
	
	public void doSomeThing() {
		System.out.println("ClassA:to do some thing");
	}

}
package xyz.jangle.design.facade;

public class ClassB {
	
	public void doSomeThing() {
		System.out.println("ClassB:to do some thing");
	}

}
package xyz.jangle.design.facade;

public class ClassC {
	
	public void doSomeThing() {
		System.out.println("ClassC:to do some thing");
	}

}
package xyz.jangle.design.facade;

public class ClassD {
	
	public void doSomeThing() {
		System.out.println("ClassD:to do some thing");
	}

}

外观

package xyz.jangle.design.facade;
/**
 * 外观类,委托子系统调用相关方法
 * @author Administrator
 *
 */
public class Facade {
	
	private ClassA classA;
	private ClassB classB;
	private ClassC classC;
	private ClassD classD;
	public Facade(ClassA classA, ClassB classB, ClassC classC, ClassD classD) {
		super();
		this.classA = classA;
		this.classB = classB;
		this.classC = classC;
		this.classD = classD;
	}
	/**
	 * 外观调用全部子系统执行相关的方法,完成业务需求。
	 */
	public void todoSomething() {
		classA.doSomeThing();
		classB.doSomeThing();
		classC.doSomeThing();
		classD.doSomeThing();
	}
	/**
	 * 外观调用部分子系统的相关方法,完成业务需求。
	 */
	public void todoSomething2() {
		classA.doSomeThing();
		classD.doSomeThing();
	}
	

}

客户端(使用)

package xyz.jangle.design.facade;

public class AppMain10 {

	public static void main(String[] args) {
		
		Facade facade = new Facade(new ClassA(), new ClassB(), new ClassC(), new ClassD());
		
		facade.todoSomething();
		System.out.println("-------------");
		facade.todoSomething2();
	}

}

输出结果:

ClassA:to do some thing
ClassB:to do some thing
ClassC:to do some thing
ClassD:to do some thing
-------------
ClassA:to do some thing
ClassD:to do some thing

工具变量法入门:解决因果分析中的内生性问题 想知道如何在复杂的数据中精确揭示因果关系?你是否遇到过自变量与误差项相关导致的困惑?工具变量法将为你拨开迷雾,帮助你剖析数据背后的因果链条。这篇文章不仅详细讲解了工具变量法的原理,还结合实际案例,让你轻松掌握这一关键研究工具。点击阅读,开启你的因果分析新篇章! 阅读详情

相关推荐

【Hypermesh】TetraMesh Panel 常用选项详解

结合Hypermesh 2020 帮助文档和自己的一点使用经验,整理了这个博客。

qgm1702的博客 3673

Java设计模式之结构型-外观模式(UML类图+案例分析)

外观模式通过提供一个高层接口来封装细节,简化子系统使用,使子系统之间解耦,它提高了程序的灵活性和可维护性。

黄团团的个人博客 1668

Unity 2022.3.3 LTS + Visual Studio 2022:手把手教你复刻《吸血鬼幸存者》核心战斗(附完整项目源码)

本文详细介绍了如何使用Unity 2022.3.3 LTS和Visual Studio 2022从零构建《吸血鬼幸存者》式战斗系统。通过图文开发教程,涵盖对象池优化、ECS架构雏形、2D物理碰撞控制等关键技术,帮助开发者高效复刻这款热门游戏的自动攻击与海量刷怪机制。

weixin_30721077的博客 458

外观模式(Facade Pattern)

一、定义 外观模式(Facade Pattern):结构型模式之一,提供了一个统一的接口,用来访问子系统中的一群接口。外观模式定义了一个高层接口,让子系统更容易使用。 二、UML类图 三、角色职责 外观角色(Facade):提供一个外观接口,对外,它提供一个易于客户端访问的接口,对内,它可以访问子系统中的所有功能。 子系统角色(SubSystem):子系统在整个系统中可以是一个或多个模块,每个模块都有若干类组成,这些类可能相互之间有着比较复杂的关系。 客户端(Client):外观接口调用测试者。 四

奶油芝士蘑菇汤的博客 4000

将pytroch模型转为paddlelite模型并集成到android程序中

在android中使用paddlelite加载yolov5模型识别opencv读取的摄像头信息

qq_56460466的博客 1554

虚拟机Ubuntu连接USRP

笔记本通过网线连接USRP。

xiaozir的博客 2305

Java设计模式之外观模式(UML类图分析+代码详解)

外观类(Facade): 为调用端提供统一的调用接口, 外观类知道哪些子系统负责处理请求,从而将调用端的请求代理给适当 子系统对象,调用者(Client): 外观接口的调用者,子系统的集合:指模块或者子系统,处理Facade 对象指派的任务,他是功能的实际提供者。

m0_51750419的博客 1974

信息安全管理与评估赛题解析-单机取证(含环境)

链接:https://pan.baidu.com/s/1OMzIq884dW2vAiUp0k2Ppg。链接:https://pan.baidu.com/s/1i5daMqhD53wYeQ6hYzRK6Q。链接:https://pan.baidu.com/s/1QFAjdQZK4sJ-gGRP42XPKA。链接:https://pan.baidu.com/s/1BSXvqN2ZGCQXewgFULoeyQ。链接:https://pan.baidu.com/s/1g9zu5ngBz_KMjW1eBMkJAw。

Brucye 1833

设计模型之外观模式(含UML完整实例)

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

atu1111的博客 2793

【100分】最长子字符串的长度

题目要求在一个环形字符串中找出字符 ‘o’ 出现了偶数次的最长子字符串长度。这里的字符串是一个环形的,即首尾相连。代码统计了字符串中字符 ‘o’ 的出现次数,并根据其奇偶性返回相应的最长子字符串长度。当 ‘o’ 的数量为偶数时,直接返回字符串长度;当 ‘o’ 的数量为奇数时,返回长度减去 1。给你一个字符串 s,字符串s首尾相连成一个环形 ,请你在环中找出 ‘o’ 字符出现了偶数次最长子字符串的长度。【最长子字符串的长度】

weixin_54707168的博客 894

计算图像哈希SHA-512

上述需要将lena.jpg放在当前目录下。

计算机视觉之光 960

Facade模式

概述 在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化。那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦?这就是要说的Facade 模式。 意图 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。[GOF 《设计模式》

wangjian223344的专栏 1175

【AIGC】大模型面试高频考点09-大模型Agent框架

聚焦AIGC专业技术分享

一个内容严谨、方向前沿、极具实践价值的AI大模型技术分享站 1964

设计模式精讲 Day 10:外观模式(Facade Pattern)

外观模式(Facade Pattern)是一种结构型设计模式,它为一个复杂的子系统提供一个简化的接口。通过引入一个高层接口来封装多个子系统的复杂操作,使客户端无需了解底层实现细节即可完成操作。外观模式强调的是“接口简化”,它不改变子系统的功能,而是提供一个更加易用的入口点。这种设计方式有助于减少客户端与子系统之间的直接耦合,提升系统的可维护性和可扩展性。本篇文章详细介绍了**外观模式(Facade Pattern)**的设计思想、实现方式及其在实际项目中的应用。

在未来等你的专栏 896

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

设计模式笔记10:外观模式(Facade Pattern)

一、外观模式的内容 外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观模式定义了一个高层接口,让子系统更容易使用。外观模式又称为门面模式,它是一种对象结构型模式。 医院的例子 用一个例子进行说明,如果把医院作为一个子系统,按照部门职能,这个系统可以划分为挂号、门诊、划价、化验、收费、取药等。看病的病人要与这些部门打交道,就如同一个子系统的客户端与一个子系统的各个类打交道一样,

Snowball 2647

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【Java开发】设计模式 10:外观模式

它通过提供一个高层级的接口,使得客户端可以更容易地使用子系统的功能,同时也避免了直接与复杂子系统接口交互所带来的复杂性和不可维护性。在外观模式中,客户端和子系统之间的交互都通过一个外观对象进行,这个对象相当于客户端与子系统之间的中介者。

尹煜的博客 217

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

编程-设计模式 10:外观模式

定义:外观模式(Facade Pattern)提供了一个统一的接口,用来访问子系统中的一群接口。它定义了一个高层接口,让子系统更容易使用。目的:简化复杂的子系统的使用,并提供一个客户友好的接口,使得客户不必了解子系统的内部结构。

qq_45831414的博客 520

C#设计模式学习笔记:(10)外观模式

本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7772184.html,记录一下学习过程以备后续查用。 一、引言 今天我们要讲结构型设计模式的第五个模式–外观模式。先从名字上来理解一下外观模式,当看到“外观”这个词时,很容易想到“外表”这个词语,两者有着 很相近的意思。就拿谈恋爱来说,“外表”很重要,如果第一眼看着很舒服、有眼缘,那就有交往下去的可能。如果长得“三寸钉、枯树皮”,估计就够呛了。 在这方面,“外观”和“外表”有着相同的作用。在软件系统中,要完成一个功能

chinaherolts2008的博客 157

Spring设计模式10-外观模式:DispatcherServlet的统一入口

DispatcherServlet 作为 Spring MVC 的外观模式实现,统一管理 HandlerMapping、HandlerAdapter、ViewResolver 等子系统,封装请求处理全流程。外部只需调用单一入口,无需关注内部协作细节,降低耦合、提升可维护性。其 doDispatch 方法集中编排各组件,体现“简化接口、隐藏复杂”的设计思想,是外观模式与委派模式结合的典范。

d3y1`5 81_09 326

23种设计模式 VOL.10: 外观模式

思想: 客户端不再关注每个对象之间的调用关系, 这个工作交给外观代理类完成, 客户端依赖外观代理类(符合迪米特法则); 角色 Facade:外观代理类; 家庭影院案例 未使用外观模式 ​​​​​​​ 对外部调用方而言往后不便于扩展(违反了开闭原则); 使用外观模式 ​​​​​​​ 由外观代理类控制家居的每个设备, 客户端调用方只要看电影享受; 代码实现 Ja...

aa503709643的博客 216

JAVA设计模式10:外观模式,使得客户端可以通过简单的接口与子系统交互

外观模式是一种结构型设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口,外观模式隐藏了子系统的复杂性,使得客户端可以通过简单的接口与子系统交互,而不需要了解子系统的内部细节。

Designer 小郑的技术博客 1401

【设计模式】学习笔记10:外观模式(Facade)

上一次我们已经知道了适配器模式是如何将一个类的接口转换成另一个符合客户期望的接口了。Java中要做到这一点,必须将一个不兼容接口的对象包装起来,变成兼容的对象。 这次要学的是外观模式. 外观模式是将一个或数个类的复杂的一切都隐藏在背后,只显露出一个干净美好的外观。 走近外观模式 假设要用Java设计一个家庭影院,包括DVD播放器,投影仪,自动屏幕,环绕立体声,甚至还有爆米花机,你设计了一些类:

D_Double's Journey 3173

10、设计模式应用举例:外观模式:解析文件

本文设计并实现了一个外观模式,封装了ReadFile、AnalyzeInformation和WriteFile三个子系统类。通过ReadAndWriteFacade外观类,用户只需调用doOption方法即可完成读取文件、删除指定内容(如HTML标签)并保存结果的完整流程,简化了复杂交互。该设计降低了客户端与子系统间的耦合,提升了可维护性与易用性。

博风_刺耳的博客(网络记事本) 91

Java设计模式10:外观模式(Facade)

外观模式(Facade) 意图 为子系统中的一组接口提供一个一致的界面,facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用 适用性 1、为一个复杂的子系统提供一个简单的接口 2、客户程序与抽象类的实现部分之间存在着很大的依赖性,Facade模式将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性 3、需要构建一个层次结构的子系统时,Fac...

jay_boolean的博客 197

设计模式——Go语言(Golang)版:10_外观模式

示例代码: package main import "fmt" func NewAPI() API { return &apiImpl{ a: NewAModuleAPI(), b: NewBModuleAPI(), } } //API is facade interface of facade package type API interface { Test() string } //facade implement type apiImpl struct { a A

weixin_42117918的博客 324
上一篇: 设计模式:7、策略模式(政策)
下一篇: 设计模式:11、迭代器模式(游标)
博风
博客等级 码龄16年 442粉丝 357原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值