设计模式:10、外观模式

目录

0、定义

1、外观模式的两种角色

2、外观模式的UML类图

3、示例代码


0、定义

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

1、外观模式的两种角色

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

2、外观模式的UML类图

3、示例代码

子系统

java 复制代码
package xyz.jangle.design.facade;

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

}
java 复制代码
package xyz.jangle.design.facade;

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

}
java 复制代码
package xyz.jangle.design.facade;

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

}
java 复制代码
package xyz.jangle.design.facade;

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

}

外观

java 复制代码
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();
	}
	

}

客户端(使用)

java 复制代码
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();
	}

}

输出结果:

bash 复制代码
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
相关推荐
静水流深_沧海一粟10 小时前
04 | 别再写几十个参数的构造函数了——建造者模式
设计模式
StarkCoder10 小时前
从UIKit到SwiftUI的迁移感悟:数据驱动的革命
设计模式
阿星AI工作室17 小时前
给openclaw龙虾造了间像素办公室!实时看它写代码、摸鱼、修bug、写日报,太可爱了吧!
前端·人工智能·设计模式
_哆啦A梦2 天前
Vibe Coding 全栈专业名词清单|设计模式·基础篇(创建型+结构型核心名词)
前端·设计模式·vibecoding
阿闽ooo5 天前
中介者模式打造多人聊天室系统
c++·设计模式·中介者模式
小米4965 天前
js设计模式 --- 工厂模式
设计模式
逆境不可逃5 天前
【从零入门23种设计模式08】结构型之组合模式(含电商业务场景)
线性代数·算法·设计模式·职场和发展·矩阵·组合模式
驴儿响叮当20105 天前
设计模式之状态模式
设计模式·状态模式
电子科技圈5 天前
XMOS推动智能音频等媒体处理技术从嵌入式系统转向全新边缘计算
人工智能·mcu·物联网·设计模式·音视频·边缘计算·iot
徐先生 @_@|||5 天前
安装依赖三方exe/msi的软件设计模式
设计模式