大家都来设计模式---门面(Facade)模式

1. 概念

        Facade模式要求一个子系统的外部与其内部的通信必须通过一个统一的门面对象进行。门面对象提供一个高层次的接口,使得子系统更易于使用

                                                                                      

       如图所示,大方框代表整个系统边界,外面的系统不直接与子系统内的元素打交道,而是通过门面来进行通信。这样的话,隐藏了子系统的实现细节,将调用者与子系统的内部复杂性分隔开

       由图可以得知,系统结构中包含两个重要角色:

       门面角色:客户端可以调用这个角色的方法。此角色知晓相关的子系统的功能和责任。在正常情况下,本角色将所有从客户端发来的请求委派到相应的子系统中去。
       子系统角色:可以同时有一个或多个子系统。每一个子系统都不是一个单独的类,而是一个类的集合

2. 应用场景

1) 为一个复杂子系统提供一个简单接口

        子系统往往因为不断深化而变得越来越复杂,使用门面模式可以使得子系统更具可复用性。

2) 子系统的独立性

        引入Facade模式将一个子系统与它的客户端以及其他的子系统分离,可以提高子系统的独立性和可移植性

3) 层次化结构

        在构建一个层次化的系统时,可以使用Facade模式定义系统中每一层的入口。如果层与层之间是相互依赖的,则可以限定它们仅通过Facade进行通信,从而简化了层与层之间的依赖关系

3. 示例

        大家都知道,计算机的运行需要CPU、内存(Memory)、硬盘的配合, CPU主要负责计算并处理数据,内存负责加载数据、硬盘负责存储及读取数据。对用户而言,如果使用计算机需要他依次打开CPU、内存、硬盘的相应功能,那真是个噩梦。

        现在通过Facade模式将CPU、内存等子系统隐藏,呈现给用户的是一台计算机,用户不需要了解其内部实现细节,只要按一个键就可以运行,由计算机自己去管理其子系统(CPU、内存、硬盘)的运行,计算机这个类就可以理解成Facade类,如下图所示:

       


CPU.java

public class CPU {
	public void startProcessData() {

	}
}
Memory.java

public class Memory {
	public void startLoad() {

	}
}
HardDrive.java

public class HardDrive {
	public void startReadData() {

	}
}
Computer.java

public class Computer {
	private CPU cpu;
	private Memory memory;
	private HardDrive hardDrive;

	public Computer() {
		this.cpu = new CPU();
		this.memory = new Memory();
		this.hardDrive = new HardDrive();
	}

	public void run() {
		cpu.startProcessData();
		memory.startLoad();
		hardDrive.startReadData();
	}
}
Client.java

public class Client {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Computer computer = new Computer();

		computer.run();
	}

}











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值