定义
一个子系统的外部与内部的通信必须通过一个统一的对象进行。门面模式提高一个高层次的接口,使得子系统更易实现。
门面对象就是一个提供外部访问子系统的一个接口,除了这个接口不允许有任何访问子系统的行为发生。
Facede门面角色
-客户端调用门面方法,通过该角色将客户端的请求委派到相应的子系统中,改系统没有实际的业务逻辑。
subsystem子系统角色
可以同时拥有一个或者多个子系统。每个子系统都不是一个单独的类,而是一个类的集合。子系统不知道门面的存在,对于子系统而言,门面仅仅是一个客户端而已。
UML图
/**
* cpu子系统类
* @author Administrator
*
*/
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...");
}
}
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...");
}
}
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...");
}
}
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();
}
}
门面模式优点:
1.减少系统之间相互依赖。想要访问子系统就必须经过门面对象。
2.提高灵活性,子类系统可以根据需求变更改变。
3.只能同过门面模式访问,可以通过门面对象设置权限。门面模式缺点
1.不符合开闭原则,对修改关闭,对扩展开放。一旦出现问题就必须修改门面角色代码。