门面模式

门面模式

也叫外观(Facade)模式,外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性

在这里插入图片描述

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

客户端不与系统耦合,外观类与系统耦合

实现细节

Shape:系统角色,定义子系统的功能

ConcreteShape:具体功能类

Facade:门面角色,客户端可以调用这个角色,此角色知晓子系统的所有功能和责任。此橘色会将所有从客户端发来的请求委派到相应的子系统去,它只是一个委托类。

使用场景

  1. 为一个复杂子系统提供一个简单接口
  2. 提高子系统的独立性
  3. 在层次化结构中,可以使用Facade模式定义系统中每一层的入口
  4. slf4j框架使用了门面模式,即把自己作为一个日志接口,并不提供实现。

优点

  1. 减少系统的相互依赖,所有的依赖都是对门面对象的依赖,与子系统无关
  2. 提高了灵活性 依赖减少了,灵活性自然提高了,子系统内部的变化,只要不影响门面对象,高层就不用变化
  3. 提高安全性 想让你访问子系统的哪些业务就开通哪些逻辑,不在门面对象上开通的方法,不能访问到

缺点

  1. 不符合开闭原则,如果要改东西很麻烦,继承重写都不合适

案例

电脑整机是 CPU、内存、硬盘的外观。有了外观以后,启动电脑和关闭电脑都简化了。

直接 new 一个电脑。在 new 电脑的同时把 cpu、内存、硬盘都初始化好并且接好线。

对外暴露方法(启动电脑,关闭电脑)。

启动电脑(按一下电源键):启动CPU、启动内存、启动硬盘

关闭电脑(按一下电源键):关闭硬盘、关闭内存、关闭CPU

  1. 定义子系统computer的open功能
public interface Computer {
	void open();
}
  1. 具体的子系统角色
class Cpu implements Computer {
	public void open() {
		System.out.println("CPU OPEN");
	}
}

class Ddr implements Computer {
	public void open() {
		System.out.println("DDR OPEN");
	}
}

class Ssd implements Computer {
	public void open() {
		System.out.println("SSD OPEN");
	}
}

  1. 门面角色,封装系统的功能
public class Facade {

	private Cpu cpu;
	private Ddr ddr;
	private Ssd ssd;

	public Facade() {

		cpu = new Cpu();
		ddr = new Ddr();
		ssd = new Ssd();
	}

	public void onCpu() {
		cpu.open();
	}

	public void onDdr() {
		ddr.open();
	}

	public void onSsd() {
		ssd.open();
	}
}
  1. 具体使用
public class Demo {

	public static void main(String[] args) {
		Facade facade = new Facade();

		facade.onCpu();
		facade.onDdr();
		facade.onSsd();
	}
}

其实说白了就是通过一个门面类将子系统的功能封装,避免外界使用子系统的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值