当前位置: 首页 > article >正文

设计模式:10、外观模式

目录

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


http://www.kler.cn/a/412771.html

相关文章:

  • 365天深度学习训练营-第P6周:VGG-16算法-Pytorch实现人脸识别
  • MySQL系列之远程管理(安全)
  • 使用UKEY进行数字签名和加密 -- HSM、PKCS#11与Signtool
  • 《免费的学习网站推荐3》
  • CRTP mixins EBO
  • 研0找实习【学nlp】15---我的后续,总结(暂时性完结)
  • CTF之密码学(DES)
  • go sync.WaitGroup
  • MySQL:表的增删改查(CRUD)
  • etcd、kube-apiserver、kube-controller-manager和kube-scheduler有什么区别
  • 架构01-演进中的架构
  • Axure农业农村数据可视化大屏模板分享
  • RS232和RS485
  • 【软考】系统架构设计师-软件工程基础
  • 面试(十一)
  • Day49 | 动态规划 :线性DP 判断子序列两个字符串的删除操作
  • mini-spring源码分析
  • ASPICE 4.0在汽车行业软件开发中的广泛应用与深远影响
  • Hadoop Namenode与Resourcemanager高可用搭建教程
  • 微积分复习笔记 Calculus Volume 1 - 6.8 Exponential Growth and Decay
  • go聊天项目4-显示用户列表
  • 比特币安全机制与交易验证体系:私钥、公钥与防伪防篡改的深度解析
  • 如何安全高效地打开和管理动态链接库(DLL)?系统提示dll丢失问题的多种有效修复指南
  • vue 使用el-button 如何实现多个button 单选
  • maven 工具 clean、compile、package、install、deploy 常用命令使用区别
  • 非常简单实用的前后端分离项目-仓库管理系统(Springboot+Vue)part 2