外观模式(Facade Pattern)

来源:互联网 发布:windows phone刷机工具 编辑:程序博客网 时间:2024/05/22 00:11

外观模式定义:外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

这个模式比较简单,一个普通流程:洗脸 - 刷牙 - 穿衣 - 背包

public class Face {public void wash(){System.out.println("Wash face!");}}
public class Cloth {public void wear(){System.out.println("Wear cloth!");}}
public class Tooth {public void brush(){System.out.println("Brush tooth!");}}
public class Bag {public void prepare(){System.out.println("Prepare bag!");}}
public class Client {public static void main(String[] args) {Face f = new Face();Tooth t = new Tooth();Cloth c = new Cloth();Bag b = new Bag();f.wash();t.brush();c.wear();b.prepare();}}
Wash face!Brush tooth!Wear cloth!Prepare bag!
假使一个流程非常复杂,如:闹铃响了 - 关掉闹铃 - 打个哈欠 - 坐起来 - 伸懒腰 - ... - 出门,如果沿用上面的设计方式,则Client被具体的实现方式所捆绑,与此同时,如此复杂的一套流程由于是在Client内部实现,不具有复用性

站在Client的角度思考,我并不关心出门这个流程的具体实现细节,关注的是出门这个功能,如此一来,我们应该考虑到封装流程的具体实现细节,对外提供某一功能

在原有的子系统之上提供一个简单的接口以供使用,使Client和复杂的实现流程解耦,并且极大的提高了流程的复用性,扩展性也较高

隐藏具体的实现过程,对外提供一个简单的接口以供使用,这就是外观模式

特别要注意的是,外观模式并没有封装子系统(封装的是具体的实现流程),如果需要,依然可以自由的调用子系统中的类

public class Go {public void goOutside(){Face f = new Face();Tooth t = new Tooth();Cloth c = new Cloth();Bag b = new Bag();f.wash();t.brush();c.wear();b.prepare();}}
public class Client {public static void main(String[] args) {Go g = new Go();g.goOutside();}}
Wash face!Brush tooth!Wear cloth!Prepare bag!

对于简单的流程,使用外观模式会提高带码的复杂度,得不偿失

原创粉丝点击