首页 > 代码库 > java设计模式--结构型模式--外观模式

java设计模式--结构型模式--外观模式

 1                                             外观模式 2  概述 3     为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 4   5   6  适用性 7     1.当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越 8       复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容 9       易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难。10       Facade可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需11       要更多的可定制性的用户可以越过facade层。12 13     2.客户程序与抽象类的实现部分之间存在着很大的依赖性。引入facade将这个子系统与客14       户以及其他的子系统分离,可以提高子系统的独立性和可移植性。15 16     3.当你需要构建一个层次结构的子系统时,使用facade模式定义子系统中每层的入口点。17       如果子系统之间是相互依赖的,你可以让它们仅通过facade进行通讯,从而简化了它们18       之间的依赖关系。19  20  21  参与者22     1.Facade23       知道哪些子系统类负责处理请求。24       将客户的请求代理给适当的子系统对象。25 26     2.Subsystemclasses27       实现子系统的功能。28       处理由Facade对象指派的任务。29       没有facade的任何相关信息;即没有指向facade的指针。

 

测试类:

 1 public class Test { 2      3     public static void main(String[] args) { 4         ServiceA sa = new ServiceAImpl(); 5         ServiceB sb = new ServiceBImpl(); 6          7         sa.methodA(); 8         sb.methodB(); 9         10         System.out.println("========");11         //facade12         Facade facade = new Facade();13         facade.methodA();14         facade.methodB();15     }16 }
1 public interface ServiceA {2     public void methodA();3 }
1 public class ServiceAImpl implements ServiceA {2 3     public void methodA() {4         System.out.println("这是服务A");5     }6 }
1 public interface ServiceB {2     public void methodB();3 }
1 public class ServiceBImpl implements ServiceB {2 3     public void methodB() {4         System.out.println("这是服务B");5     }6 }
1 public interface ServiceC {2     public void methodC();3 }
1 public class ServiceCImpl implements ServiceC {2 3     public void methodC() {4         System.out.println("这是服务C");5     }6 }
 1 public class Facade { 2  3     ServiceA sa; 4      5     ServiceB sb; 6      7     ServiceC sc; 8      9     public Facade() {10         sa = new ServiceAImpl();11         sb = new ServiceBImpl();12         sc = new ServiceCImpl(); 13     }14     15     public void methodA() {16         sa.methodA();17         sb.methodB();18     }19     20     public void methodB() {21         sb.methodB();22         sc.methodC();23     }24     25     public void methodC() {26         sc.methodC();27         sa.methodA();28     }29 }

 

java设计模式--结构型模式--外观模式