定义
外观模式(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模式注重稳定接口的前提下为对象扩展功能。
相关推荐
JAVA-设计模式-结构型模式-外观模式
c++设计模式-结构型模式-外观模式;qt工程;c++简单源码; 外观(Facade)模式又叫作门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,...
Java 设计模式3-结构型-适配器、组合、代理、外观
【例3.10】外观模式-安全系统 【例3.11】外观模式-椭圆功能 【例3.13】桥接模式-茶水机系统 【例3.14】桥接模式-几何立体体积 【例4.1】迭代器模式-矩阵搜索 【例4.2】迭代器模式-产品搜索 ...
设计模式_结构型_外观模式
设计模式面面观(13):外观模式(Facade Pattern)-结构型模式 http://blog.csdn.net/fanweiwei/archive/2008/04/17/2299641.aspx
外观模式是一种结构型模式。 结构 图-外观模式结构图 Facade : 了解每个子系统类的功能,负责分发客户端的请求给各个子系统去处理。 class Class1 { public void op1() { System.out.println(...
C#面向对象设计模式纵横谈\C#面向对象设计模式纵横谈\10.Facade 外观模式(结构型模式).wmv )
1.桥接模式:电子商务网站常有这样的功能:发送消息通知,比如订货发货通知等,从业务上看,消息分为普通消息、加急消息和特急消息多种不同的消息类型,其业务处理是不一样的,比如加急消息是在消息上添加加急标记.....
设计模式10-代理模式、结构型模式大复习 设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式、备忘录模式 设计模式15-观察者模式、状态模式 设计模式16-策略...
C#面向对象设计模式纵横谈(11):Facade 外观模式(结构型模式)
C#面向对象设计模式纵横谈(11):Facade 外观模式(结构型模式) (Level 300)
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第11节:结构型模式Facade外观模式
结构型模式:外观、代理、适配器、桥接等模式,有案例和图解说明,有助于理解
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...
结构型: 6. 适配器模式(Adapter Pattern) 7. 桥接模式(Bridge Pattern) 8. 装饰模式(Decorator Pattern) 9. 组合模式(Composite Pattern) 10. 外观模式(Facade Pattern) 11. 享元模式(Flyweight ...
资源中包括7个实验的源代码和报告。源代码可运行,报告中包括实现类图。结构型设计模式:适配器模式 代理模式 桥接模式 装饰模式 组合模式 外观模式 享元模式
外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性。 例子1:一个电源总开关可以控制四盏灯、一个风扇、一台空调...
本课程重点介绍了七种结构型模式:适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式和代理模式。
外观模式( Facade ) 桥接模式( Bridge ) 组合模式( Composite ) 享元模式( Flyweight ) 行为型模式包含了: 策略模式( Strategy ) 模板方法模式( Template Method ) 观察者模式( Observer ) 迭代子...