zoukankan      html  css  js  c++  java
  • facade模式

    好吧,又见到这个模式了。。

    在项目中,这个模式被用来构建整个system,作为对外交互的接口,这是facade的擅长的。

    A facade is an object that provides a simplified interface to a larger body of code, such as a class library. A facade can:

    • make a software library easier to use, understand and test, since the facade has convenient methods for common tasks;
    • make code that uses the library more readable, for the same reason;
    • reduce dependencies of outside code on the inner workings of a library, since most code uses the facade, thus allowing more flexibility in developing the system;
    • wrap a poorly-designed collection of APIs with a single well-designed API (as per task needs).

    An Adapter is used when the wrapper must respect a particular interface and must support a polymorphic behavior. On the other hand, a facade is used when one wants an easier or simpler interface to work with.

    上图,from wiki:

    FacadeDesignPattern

    上代码:

    * Complex parts */
     
    class CPU {
     
        public void freeze() { ... }
        public void jump(long position) { ... }
        public void execute() { ... }
     
    }
     
    class Memory {
     
        public void load(long position, byte[] data) { ... }
     
    }
     
    class HardDrive {
     
        public byte[] read(long lba, int size) { ... }
     
    }
     
    /* Facade */
     
    class Computer {
     
        private CPU cpu;
        private Memory memory;
        private HardDrive hardDrive;
     
        public Computer() {
            this.cpu = new CPU();
            this.memory = new Memory();
            this.hardDrive = new HardDrive();
        }
     
        public void startComputer() {
            cpu.freeze();
            memory.load(BOOT_ADDRESS, hardDrive.read(BOOT_SECTOR, SECTOR_SIZE));
            cpu.jump(BOOT_ADDRESS);
            cpu.execute();
        }
     
    }
     
    /* Client */
     
    class You {
     
        public static void main(String[] args) {
            Computer facade = new Computer();
    	facade.startComputer();
        }
     

    比较简单,就不解释了

  • 相关阅读:
    「golang」go-micro指定consul地址
    「postgres」无数据则插入,有数据不做插入
    「postgres」导出数据以及分割数据
    「postgre」调整表结构
    「postgre」查看DB的物理占用空间
    「postgre」INT最大值
    「postgre」服务重启
    「golang」关于TIME_WAIT优化
    深入理解Spring Boot属性配置文件
    springboot 中的commandLineRunners接口
  • 原文地址:https://www.cnblogs.com/justin_s/p/1905084.html
Copyright © 2011-2022 走看看