结构型-外观模式

定义

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

 

UML

Facade:这个外观类为子系统提供一个共同的对外接口

Clients:客户对象通过一个外观接口读写子系统中各接口的数据资源。

结构型-外观模式
 

实例

1.比如一个家庭影院,我们需要看电影,肯需要先打开电视机,音响,调节灯光,炸爆米花,准备可乐等一系列的动作,调用电视机,音响、微波炉等子系统的各种接口,但是我们将这些接口定义好放在一个高层接口中,选择看电影由这个高层接口调用各子系统完成自己的工作。

 2.启动电脑,需要cpu 内存等各组建工作,而电脑给了一个开机按钮就是一个外观模式,让人(客户)可以按一个按钮而启动各组建,不用一个个处理。

/* 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) {
...
}
}

/* Façade */
class Computer {
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();
}
}

 

 

优点

(1)实现了子系统与客户端之间的松耦合关系。

(2)客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。

缺点

 

使用场景

(1)设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式。

(2) 开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。

(3) 维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互。

 

注:
   1.Facade模式不仅简化了整个组件系统的接口,同时从某种程度上也达到了一种“解耦”的效果----内部子系统的任何变化不会影响到Facade接口的变化。 Facade设计模式更注重从架构的层次去看整个系统,而不是单个类的层次。Facdae很多时候更是一种架构

  2. 在设计外观时,不需要增加额外的功能,不要从外观方法中返回子系统中的组件给客户,应用外观的目的是提供一个高层次的接口。因此,外观方法最适合提供特定的高层次的业务服务,而不是进行底层次的单独的业务执行。
  3.注意区分Facade模式、Adapter模式、Bridge模式与Decorator模式。Facade模式注重简化接口,Adapter模式注重转换接口,Bridge模式注重分离接口(抽象)与其实现,Decorator模式注重稳定接口的前提下为对象扩展功能。

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