我的在CSDN上的BLOG:http://blog.csdn.net/feb13/article/details/7905731java
FACADE 外观模式ide
一、 意图测试
为子系统中的一组接口提供一个一致的界面,Façade模式定义了一个高层接口,这一接口使得这一子系统更加容易使用。.net
二、 适用性代理
在遇到如下状况时使用:指针
三、 结构code
四、 参与者对象
Façadeblog
知道哪些子系统类负责子系统对象;接口
将客户的请求代理给适当的子系统对象。
Subsystemclasses
实现子系统的功能。
处理由Façade对象指派的任务。
没有façade的任何相关信息;即没有指向façade的指针。
五、 协助
六、 效果
Façade模式有如下有点:
1) 它对客户屏蔽子系统组件,于是减小了客户处理的对象的数目并使得子系统使用起来方便。
2) 它实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件每每是紧耦合的。
3) 它并不限制它们使用子系统类,所以能够在系统易用性和通用性之间加以选择。
七、 实现
1) 下降客户—子系统之间的耦合度;用抽象类实现Façade而它的具体子类对应于不一样的子系统实现,这能够进一步下降客户与子系统的耦合度。
2) 公共子系统类与私有子系统类;一个子系统类与一个类的类似之处是,它们都有接口而且它们都封装了一些东西——类封装了状态和操做,而子系统封装了一些类。
八、 相关示例
Model
package com.examples.pattern.facade; public interface IModel_A { public void testA(); }
package com.examples.pattern.facade; public class Model_A_impl implements IModel_A { @Override public void testA() { System.out.println("这是模块A的测试代码..."); } }
package com.examples.pattern.facade; public interface IModel_B { public void testB(); }
package com.examples.pattern.facade; public class Model_B_impl implements IModel_B { @Override public void testB() { System.out.println("这是模块B的测试代码..."); } }
package com.examples.pattern.facade; public interface IModel_C { public void testC(); }
package com.examples.pattern.facade; public class Model_C_impl implements IModel_C { @Override public void testC() { System.out.println("这是模块C的测试代码..."); } }
Façade
package com.examples.pattern.facade; public class Facade { public void test() { IModel_A ma = new Model_A_impl(); ma.testA(); IModel_B mb = new Model_B_impl(); mb.testB(); IModel_C mc = new Model_C_impl(); mc.testC(); } }
Client
package com.examples.pattern.facade; public class Client { public static void main(String[] args) { new Facade().test(); } }
九、 相关模式
Abstract Factory模式能够与Façade模式一块儿使用以提供一个接口,这个接口可用来以一种子系统独立的方式建立子系统对象。Abstract Factory也能够代替Façade模式隐藏那些平台相关的类。
Mediator 模式与Façade模式的类似支出是,它抽象了一些已有的类的功能。然而,Mediator的目的是对同事之间的任意通信进行抽象,一般集中不属于任何单 个对象的功能。Mediator的同事对象知道中介者并与它通讯,而不是直接与其余同类对象通讯。相对而言,Façade模式仅对子系统对象的接口进行抽 象,从而使它们更容易使用;它并不定义新功能,子系统也不知道Façade的存在。