基本概念
外观模式,他隐藏了系统的复杂性,并且向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。
使用场景
该模式就是把一些复杂的流程封装成一个接口i提供给外部用户更简单的使用。
主要涉及到3个角色:
1)门面(Facade)角色:
外观模式的核心,它被客户(Client)角色调用,它熟悉子系统的功能。内部可以根据客户角色的需求预定了几种功能的组合。
2)子系统(Module)角色:
实现了子系统的功能,它对客户(Client)角色是未知的。门面(Facade)角色知道子系统(Module)角色的,但是子系统(Module)不应该知道门面(Facade)角色。
3)客户(Client)角色:
通过调用门面(Facade)角色实现各种功能。
DEMO
/**
* cpu子系统类
* 他是不知道Facade类的
* 他是CPU功能的实现
*/
public class CPU
{
public static final Logger LOGGER = Logger.getLogger(CPU.class);
public void start() {
LOGGER.info("cpu is start...");
}
public void shutDown() {
LOGGER.info("CPU is shutDown...");
}
}
/**
* Disk子系统类
* 他是不知道Facade类的
* 他是Disk功能的实现
*/
public class Disk
{
public static final Logger LOGGER = Logger.getLogger(Disk.class);
public void start() {
LOGGER.info("Disk is start...");
}
public void shutDown() {
LOGGER.info("Disk is shutDown...");
}
}
/**
* Memory子系统类
* 他是不知道Facade类的
* 他是Memory功能的实现
*/
public class Memory
{
public static final Logger LOGGER = Logger.getLogger(Memory.class);
public void start() {
LOGGER.info("Memory is start...");
}
public void shutDown() {
LOGGER.info("Memory is shutDown...");
}
}
/**
* 门面类(核心)
* 这个是暴露给外部的门面
*/
public class Computer
{
public static final Logger LOGGER = Logger.getLogger(Computer.class);
private CPU cpu;
private Memory memory;
private Disk disk;
public Computer() {
cpu = new CPU();
memory = new Memory();
disk = new Disk();
}
public void start() {
LOGGER.info("Computer start begin");
cpu.start();
disk.start();
memory.start();
LOGGER.info("Computer start end");
}
public void shutDown() {
LOGGER.info("Computer shutDown begin");
cpu.shutDown();
disk.shutDown();
memory.shutDown();
LOGGER.info("Computer shutDown end...");
}
}
/**
* 客户端类
* 通过门面角色即可实现开机关机的功能
* 而不需要了解其内部的实现
*/
public class Cilent {
public static final Logger LOGGER = Logger.getLogger(Cilent.class);
public static void main(String[] args) {
Computer computer = new Computer();
computer.start();
LOGGER.info("=================");
computer.shutDown();
}
}
网友评论