美文网首页
10、FACADE(外观)

10、FACADE(外观)

作者: 我要扭开奥利奥 | 来源:发表于2019-05-24 16:55 被阅读0次

    目的

    为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这个子系统更加易用。

    使用优点

    • 需要为复杂子系统提供一个煎蛋接口时
    • 客户程序和抽象类的实现部分有很强依赖性时,使用facade让子系统和客户程序、其他子系统之间解耦合,提高系统独立性和可移植性。
    • 在定义层次系统的时候使用facade定义每一层的入口点。让每一层之间仅使用facade进行通讯,简化他们之间的依赖关系。

    使用场景

    假设小陈工作之后发了工资,由于工资很少,所以买了一台超级原始的电脑,电脑启动的时候步骤为

    1. BIOS启动
    2. 主引导程序运行
    3. 硬盘启动
    4. 操作系统启动
      因此,每次小陈启动电脑的时候需要进行4步操作才能开机开始code。但是这是一个非常不好的体验,因为并不能仅仅使用按start键就启动。因此,我们要使用facade模式来实现简化了流程的目的。
      在这种情况下,我们使用的UML如下:


      facade.png

    根据这个UML我们可以看见,我们使用了一个facade将所有的本来需要小陈自己去做的操作全部包装了起来。通过这样的包装,小陈在每次操作的时候只需要和facade打交道了,同时还把多个操作封装到了一起,既简化了操作,又保证了操作顺序的正确性。

    代码示例如下:
    首先是定义开机的四种操作

    /**
     * 启动BIOS
     */
    public class Bios {
        static void startBios(){
            System.out.println("开始启动BIOS");
        }
    }
    
    /**
     * 启动引导程序
     */
    public class BootStrap {
        static void startBootStrap(){
            System.out.println("开始启动引导程序");
        }
    }
    
    /**
     * 启动硬盘
     */
    public class Disk {
        static void startDisk(){
            System.out.println("开始启动硬盘");
        }
    }
    
    /**
     * 启动硬盘
     */
    public class OperatingSystem {
        static void startSystem(){
            System.out.println("开始启动操作系统");
        }
    }
    

    然后我们使用一个facade将所有的操作封装在一起,代码如下

    /**
     * facade将所有操作封装在一起
     */
    public class Facade {
        static void powerOn(){
            Bios.startBios();
            BootStrap.startBootStrap();
            Disk.startDisk();
            OperatingSystem.startSystem();
        }
    }
    

    然后我们客户端调用Facade的函数使用开机操作

    /**
     * 客户端执行开机操作
     */
    public class Client {
        public static void main(String[] args) {
            Facade.powerOn();
        }
    }
    

    操作结果如下:

    开始启动BIOS
    开始启动引导程序
    开始启动硬盘
    开始启动操作系统
    

    相关文章

      网友评论

          本文标题:10、FACADE(外观)

          本文链接:https://www.haomeiwen.com/subject/vqrnzqtx.html