设计模式——门面模式

Posted boycelee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式——门面模式相关的知识,希望对你有一定的参考价值。

  • 定义

    一个子系统的外部与内部的通信必须通过一个统一的对象进行。门面模式提高一个高层次的接口,使得子系统更易实现。

门面对象就是一个提供外部访问子系统的一个接口,除了这个接口不允许有任何访问子系统的行为发生。

  • 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.不符合开闭原则,对修改关闭,对扩展开放。一旦出现问题就必须修改门面角色代码。



以上是关于设计模式——门面模式的主要内容,如果未能解决你的问题,请参考以下文章

门面模式

10-门面(Facade)模式Ruby实现

设计模式之门面模式

设计模式之门面模式20170728

揭秘设计模式之门面模式

常用设计模式之门面模式