简介:
外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用
角色:
1).门面角色(facade):外观模式的核心。它被客户角色调用,它熟悉子系统的功能。内部根据客户角色的需求预定了几种功能的组合。
2).子系统角色:实现了子系统的功能。它对客户角色和Facade时未知的。它内部可以有系统内的相互交互,也可以由供外界调用的接口。
3).客户角色(client):通过调用Facede来完成要实现的功能。
个人总结:说白了该模式就是把一个复杂了流程封装成一个简单的接口供给外部用户更简单的使用,并且不用知道内部系统是如何实现的,客户只要和facade交互。
实例:
电脑:我们电脑 里面有 CPU 显卡 内存 硬盘 (子系统)普通人使用者只需要知道这是一台电脑就行了(门面) 电脑当然我们不可能去一个一个开关机吧,所有要设计一个总开关控制里面的所有模块的开关机。
子系统
package com.sl.demo.facade;
/**
* CPU
* @author pengkun
*
*/
public class CPU {
//开启
public void start() {
System.out.println("CPU开启了。。。。");
}
//关闭
public void stop() {
System.out.println("CPU关闭了。。。。");
}
}
package com.sl.demo.facade;
/**
* 显卡
* @author pengkun
*
*/
public class GraphicsCard {
//开启
public void start() {
System.out.println("显卡开启了。。。。");
}
//关闭
public void stop() {
System.out.println("显卡关闭了。。。。");
}
}
package com.sl.demo.facade;
/**
* 内存
* @author pengkun
*
*/
public class Memory {
//开启
public void start() {
System.out.println("内存开启了。。。。");
}
//关闭
public void stop() {
System.out.println("内存关闭了。。。。");
}
}
门面
package com.sl.demo.facade;
/**
* 电脑(门面角色)
* @author pengkun
*
*/
public class Computer {
//包含子系统
private CPU cpu;
private GraphicsCard graphicsCard;
private Memory memory;
public Computer() {
super();
this.cpu =new CPU();
this.graphicsCard = new GraphicsCard();
this.memory = new Memory();
}
//开启
public void start() {
System.out.println("电脑开启了。。。。");
cpu.start();
graphicsCard.start();
memory.start();
}
//关闭
public void stop() {
System.out.println("电脑关闭了。。。。");
cpu.stop();
graphicsCard.stop();
memory.stop();
}
}
测试:
@Test
public void test() {
Computer computer=new Computer();
//开机
computer.start();
System.out.println("--------------------------");
//关机
computer.stop();
}
电脑开启了。。。。
CPU开启了。。。。
显卡开启了。。。。
内存开启了。。。。
--------------------------
电脑关闭了。。。。
CPU关闭了。。。。
显卡关闭了。。。。
内存关闭了。。。。
总结:
该模式使得客户端和子系统之间解耦,让子系统内部的模块功能更容易扩展和维护,客户端根本不需要知道子系统内部的实现,或者根本不需要知道子系统内部的构成,它只需要跟Facade类交互即可。有些方法是对系统外的,有些方法是系统内部相互交互的使用的。子系统把那些暴露给外部的功能集中到门面中,这样就可以实现客户端的使用,很好的隐藏了子系统内部的细节。