设计模式(9):外观模式

一.迪米特法则(最少知识原则)

  • 一个软件实体应当尽可能少的与其他实体发生相互作用。

二.外观模式

  • 为子系统提供统一的入口,封装子系统的复杂性,便于客户端调用。
  • 它的核心是什么呢,就是为我们的子系统提供一个统一的入口,封装子系统的复杂性,子系统里边有多复杂我不管,对于客户来说,只跟他打交道便于客户调用,客户呢只要知道最少的知识就行了,我只要知道你就行了,至于你里边怎么回事我不管。就像我们现在用手机一样,我只要知道触摸屏怎么点就行了,至于说触摸屏跟主板怎么打交道?怎么跟CPU打交道?怎么跟电池打交道我一概不管。

三.以注册公司为例,代码实现

1.工商局检查名称是否重复

java 复制代码
public class HangzhouBusiness{
	public void checkName() {
		System.out.println("工商局检查名称是否重复");
	}
}

2.质检局办理组织机构代码证

java 复制代码
public class HangzhouInspection{
	public void dealWithCode() {
		System.out.println("质检局办理组织机构代码证");
	}
}

3.税务局办理税务登记证

java 复制代码
public class HangzhouTaxation{
	public void dealWithCertificate() {
		System.out.println("税务局办理税务登记证");
	}
}

4.银行开户

java 复制代码
public class HangzhouBank{
	public void openAccount() {
		System.out.println("银行开户");
	}
}

5.注册公司门面

java 复制代码
/**
 * 注册公司门面对象
 */
public class RegisterCompanyFacade {
	public void registerCompany() {
		HangzhouBusiness hangzhouBusiness = new HangzhouBusiness();
		HangzhouInspection hangzhouInspection = new HangzhouInspection();
		HangzhouTaxation hangzhouTaxation = new HangzhouTaxation();
		HangzhouBank hangzhouBank = new HangzhouBank();
		hangzhouBusiness.checkName();
		hangzhouInspection.dealWithCode();
		hangzhouTaxation.dealWithCertificate();
		hangzhouBank.openAccount();
	}
}

5.注册公司客户端Client

java 复制代码
/**
 * 外观模式
 */
public class App {
	public static void main(String[] args) {
		RegisterCompanyFacade registerCompanyFacade = new RegisterCompanyFacade();
		registerCompanyFacade.registerCompany();
	}
}

更多设计模式学习:

设计模式(1):介绍

设计模式(2):单例模式

设计模式(3):工厂模式

设计模式(4):建造者模式

设计模式(5):原型模式

设计模式(6):桥接模式

设计模式(7):装饰器模式

设计模式(8):组合模式

设计模式持续更新中...

相关推荐
952361 天前
SpringBoot统一功能处理
java·spring boot·后端
Lyyaoo.1 天前
优惠券秒杀业务分析
java·开发语言
消失的旧时光-19431 天前
统一并发模型:线程、Reactor、协程本质是一件事(从线程到协程 · 第6篇·终章)
java·python·算法
勿忘初心12211 天前
Java 国密 SM4 加密工具类实战(Hutool + BouncyCastle)|企业级数据加密 + 兼容 JDK8
java·数据安全·数据加密·后端开发·企业级开发·国密 sm4
庞轩px1 天前
第8篇:原子类与CAS底层原理——无锁并发的实现
java·cas·乐观锁·aba·无锁编程·自旋
rleS IONS1 天前
SpringBoot中自定义Starter
java·spring boot·后端
苍煜1 天前
慢SQL优化实战教学
java·数据库·sql
AI进化营-智能译站1 天前
ROS2 C++开发系列16-智能指针管理传感器句柄|告别ROS2节点内存泄漏与野指针
java·c++·算法·ai
TeDi TIVE1 天前
springboot和springframework版本依赖关系
java·spring boot·后端
二哈赛车手1 天前
新人笔记---ES和kibana启动问题以及一些常用的linux的错误排查方法,以及ES,数据库泄密解决方案[超详细]
java·linux·数据库·spring boot·笔记·elasticsearch