http://oldboy-bj.taobao.com/

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

http://35java.com/zhibo/forum.php?mod=viewthread&tid=39&extra=page%3D4

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



适用性



1.
当你要为一个*杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越

复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容

易对子系统进行定制,但这也给*些不需要定制子系统的用户带来一些使用上的困难。

Fa*ade
可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足*,而那些需

要更多的可定制性的用户可以越过facade层。


2.
客户程序与抽象类的实现部分之间存在着很大的依赖性。引入facade将这个子系统与客

户以及其他的子系统分离,可以提高子系统的独立性和可移植性。


3.
当你需要构建一个层次结构的子系统时,使用facade模式定义子系统中每层的入口点。

如果子系统之间是相互依赖的,你可以让它们仅通过facade进行通讯,从而简化了它们

之间的依赖关系。





参与者



1.Facade

知道哪些子系统类负责处理请求。

将客户的请求代理给适当的子系统对象。


2.Subsystemclasses

实现子系统的功能。

处理由Facade对象指派的任务。

没有facade的任何相关信息;即没有指向*acade的指针。



类图





例子

Facade


publi* class Facade {

ServiceA s*;


ServiceB sb;


ServiceC sc;


public Facade() {

sa = new S*rviceAImpl();


sb = new *erviceBImpl();

sc = new ServiceCImpl();

}


public void methodA() {

sa.methodA();

sb.methodB();

}


publi* void methodB() {

s*.methodB();

sc.methodC();

}


public void methodC() {

sc.methodC();

sa.methodA();

}
}

Subsystemclasse*


public *lass ServiceAImpl implements ServiceA {

public void methodA() {

System.out.println("
这是服务A");
}
}
public class ServiceBImpl implements ServiceB {

public void methodB() {

System.out.println("
这是服务B");
*
}
public class ServiceCImpl implements ServiceC {

public void methodC() {

System.out.println("
这是服*C");
}
}

Test


public class Test {

public static voi* main(String[] args) {


ServiceA sa = new ServiceAImpl();


Ser*iceB sb = new ServiceBImpl();


sa.metho*A();

sb.methodB();


System.out.println("========");

//facade

Facade facade = new Facade();


facade.methodA();

facade.methodB();

}
}

resu*t


这是服务A这是*务B========这是服务A这是服务B这是服务B这是服务C

 

posted on 2011-01-05 19:41  老男孩咖啡  阅读(108)  评论(0编辑  收藏  举报