设计模式--外观模式

为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
形象比喻:
我有一个专业的Nikon相机,我就喜欢自己手动调光圈、快门,这样照出来的照片才专业,但MM可不懂这些,教了半天也不会。幸好相机有Facade设计模式,把相机调整到自动档,只要对准目标按快门就行了,一切由相机自动调整,这样MM也可以用这个相机给我拍张照片了。   门面模式:外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。每一个子系统只有一个门面类,而且此门面类只有一个实例,也就是说它是一个单例模式。但整个系统可以有多个门面类。
 
Facade.java:
知道哪些子系统类负责处理请求。 将客户的请求代理给适当的子系统对象。
 1 public class Facade {
 2     ServiceA sa;
 3     
 4     ServiceB sb;
 5     
 6     ServiceC sc;
 7     
 8     public Facade() {
 9         sa = new ServiceA();
10         sb = new ServiceB();
11         sc = new ServiceC();
12     }
13     
14     public void methodA() {
15         sa.methodA();
16         sb.methodB();
17     }
18     
19     public void methodB() {
20         sb.methodB();
21         sc.methodC();
22     }
23     
24     public void methodC() {
25         sc.methodC();
26         sa.methodA();
27     }
28 }

 

子系统ServiceA.java
  1. 1 public class ServiceA{
    2     public void methodA(){
    3         System.out.println("这是服务A");
    4     }
    5 }    

     

子系统ServiceB.java
  1. 1 public class ServiceB  {
    2     public void methodB() {
    3         System.out.println("这是服务B");
    4     }
    5 }

     


子系统ServiceC.java
1 public class ServiceC {
2     public void methodC() {
3         System.out.println("这是服务C");
4     }
5 }

 

测试类:
  1.  1 public class Test {
     2     
     3     public static void main(String[] args) {
     4         Facade facade = new Facade();
     5         facade.methodA();
     6         System.out.println("========");
     7         facade.methodB();
     8     }
     9     
    10 }

     


测试结果:
这是服务A
这是服务B
========
这是服务B
这是服务C

 

posted @ 2015-06-14 10:28  西北野狼  阅读(258)  评论(0编辑  收藏  举报