Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1277292
  • 博文数量: 185
  • 博客积分: 50
  • 博客等级: 民兵
  • 技术积分: 3934
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-11 13:11
个人简介

iihero@ChinaUnix, ehero.[iihero] 数据库技术的痴迷爱好者. 您可以通过iihero AT qq.com联系到我 以下是我的三本图书: Sybase ASE in Action, Oracle Spatial及OCI高级编程, Java2网络协议内幕

文章分类

全部博文(185)

文章存档

2014年(4)

2013年(181)

分类: Sybase

2013-07-25 10:02:14

概述

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

适用性

  • 1.当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越 复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容 易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难。 Facade可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需 要更多的可定制性的用户可以越过facade层。

  • 2.客户程序与抽象类的实现部分之间存在着很大的依赖性。引入facade将这个子系统与客 户以及其他的子系统分离,可以提高子系统的独立性和可移植性。 

  • 3.当你需要构建一个层次结构的子系统时,使用facade模式定义子系统中每层的入口点。 如果子系统之间是相互依赖的,你可以让它们仅通过facade进行通讯,从而简化了它们 之间的依赖关系。

参与者

  • 1.Facade 知道哪些子系统类负责处理请求。 将客户的请求代理给适当的子系统对象。
  • 2.Subsystemclasses 实现子系统的功能。 处理由Facade对象指派的任务。 没有facade的任何相关信息;即没有指向facade的指针。

结构

实现示例


  1. package com.sql9.structured;  
  2.   
  3. class SubSysClassX {  
  4.     public void doX() {  
  5.         System.out.println("SubSysClassX doX called");  
  6.     }  
  7. }  
  8.   
  9. class SubSysClassY {  
  10.     public void doY() {  
  11.         System.out.println("SubSysClassY doY called");  
  12.     }  
  13. }  
  14.   
  15. class SubSysClassZ {  
  16.     public void doZ() {  
  17.         System.out.println("SubSysClassZ doZ called");  
  18.     }  
  19. }  
  20.   
  21. class Facade {  
  22.     private SubSysClassX x = new SubSysClassX();  
  23.     private SubSysClassY y = new SubSysClassY();  
  24.     private SubSysClassZ z = new SubSysClassZ();  
  25.       
  26.     public void doWrapper(boolean includeY) {  
  27.         System.out.println("The Facade OperationWrapper carries out complex decision-making");  
  28.         System.out.println("which in turn results in calls to the subsystem classes");  
  29.         x.doX();  
  30.         if (includeY) {  
  31.             y.doY();  
  32.         }  
  33.         z.doZ();  
  34.     }  
  35. }  
  36.   
  37. public class FacadeTest {  
  38.       
  39.     public static void main(String[] args) {  
  40.         Facade f1 = new Facade();  
  41.         f1.doWrapper(false);  
  42.           
  43.         Facade f2 = new Facade();  
  44.         f2.doWrapper(true);  
  45.     }  
  46.   
  47. }  


结果


  1. The Facade OperationWrapper carries out complex decision-making  
  2. which in turn results in calls to the subsystem classes  
  3. SubSysClassX doX called  
  4. SubSysClassZ doZ called  
  5. The Facade OperationWrapper carries out complex decision-making  
  6. which in turn results in calls to the subsystem classes  
  7. SubSysClassX doX called  
  8. SubSysClassY doY called  
  9. SubSysClassZ doZ called  

阅读(2398) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~