外观模式(Facade)

基本概念

外观模式,他隐藏了系统的复杂性,并且向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。

使用场景

该模式就是把一些复杂的流程封装成一个接口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();
    }

}

你可能感兴趣的:(外观模式(Facade))