设计模式之外观模式

总体来说设计模式分为三大类:
创建型模式5种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式7种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式11种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

外观模式

①系统(SubSystem)角色 :可以同时有一个或者多个子系统。每个子系统都不是一个单独的类,而是一个类的集合(如上面的子系统就是由ModuleA、ModuleB、ModuleC三个类组合而成)。每个子系统都可以被客户端直接调用,或者被门面角色调用。子系统并不知道门面的存在,对于子系统而言,门面仅仅是另外一个客户端而已。
②门面(Facade)角色 :客户端可以调用这个角色的方法。此角色知晓相关的(一个或者多个)子系统的功能和责任。在正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统去。

Demo:人为操作电脑

首先编写组件实体类

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) {}
    }

其次,编写组合实体类

class Computer {
    public void startComputer() {
    cpu.freeze();
    memory.load(BOOT_ADDRESS, hardDrive.read(BOOT_SECTOR, SECTOR_SIZE));
    cpu.jump(BOOT_ADDRESS);
    cpu.execute();
    }
}

其次,编写测试类

class Test {
public static void main(String[] args) {
Computer facade = new Computer();
facade.startComputer();
}
}

模式的优点

①松散耦合
让子系统内部的模块能更容易扩展和维护。
②简单易用
 客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行交互,只需要跟门面类交互就可以了。
③更好的划分访问层次
有些方法是对系统外的,有些方法是系统内部使用的。把需要暴露给外部的功能集中到门面中,这样既方便客户端使用,也很好地隐藏了内部的细节。

你可能感兴趣的:(设计模式,外观模式)