Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1334075
  • 博文数量: 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)

分类: 项目管理

2013-07-24 10:33:03

概述:

将抽象部分与它的实现部分分离,使它们都可以独立地变化。

适用性
    1.你不希望在抽象和它的实现部分之间有一个固定的绑定关系。
      例如这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换。


    2.类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。
      这时Bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。


    3.对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译。


    4.有许多类要生成,  这样一种类层次结构说明你必须将一个对象分解成两个部分。


    5.你想在多个对象间共享实现(可能使用引用计数),但同时要求调用者并不知道这一点。


参与者
    1.Abstraction
      定义抽象类的接口。
      维护一个指向Implementor类型对象的指针。


    2.RefinedAbstraction
      扩充由Abstraction定义的接口。


    3.Implementor
      定义实现类的接口,该接口不一定要与Abstraction的接口完全一致。
      事实上这两个接口可以完全不同。
      一般来讲,Implementor接口仅提供基本操作,而Abstraction则定义了基于这些基本操作的较高层次的操作。


    4.ConcreteImplementor
      实现Implementor接口并定义它的具体实现。

代码示例:



  1. package com.sql9.structured;  
  2.   
  3.   
  4. abstract class Train  
  5. {  
  6.     private String type;  
  7.     private Lead lead;  
  8.       
  9.     public Lead getLead()  
  10.     {  
  11.         return lead;  
  12.     }  
  13.       
  14.     public void setLead(Lead lead)  
  15.     {  
  16.         this.lead = lead;  
  17.     }  
  18.       
  19.     public void setType(String type)  
  20.     {  
  21.         this.type = type;  
  22.     }  
  23.       
  24.     public String getType()  
  25.     {  
  26.         return this.type;  
  27.     }  
  28.       
  29.     public abstract void manage();  
  30. }  
  31.   
  32. class SouthTrain extends Train  
  33. {  
  34.     public void manage()  
  35.     {  
  36.         Lead lead = getLead();  
  37.         lead.tryManage(this);  
  38.     }  
  39.       
  40.     public SouthTrain()  
  41.     {  
  42.         setType("南车");  
  43.     }  
  44. }  
  45.   
  46. class NorthTrain extends Train  
  47. {  
  48.     public void manage()  
  49.     {  
  50.         Lead lead = getLead();  
  51.         lead.tryManage(this);  
  52.     }  
  53.       
  54.     public NorthTrain()  
  55.     {  
  56.         setType("北车");  
  57.     }  
  58. }  
  59.   
  60. abstract class Lead  
  61. {  
  62.     public abstract void tryManage(Train train);  
  63. }  
  64.   
  65. class NorthLead extends Lead  
  66. {  
  67.     public void tryManage(Train train)  
  68.     {  
  69.         System.out.println("North Lead 管理 " + train.getType());  
  70.     }  
  71. }  
  72.   
  73. class SouthLead extends Lead  
  74. {  
  75.     public void tryManage(Train train)  
  76.     {  
  77.         System.out.println("South Lead 管理 " + train.getType());  
  78.     }  
  79. }  
  80.   
  81.   
  82. public class BridgeTest  
  83. {  
  84.   
  85.     /** 
  86.      * @param args 
  87.      */  
  88.     public static void main(String[] args)  
  89.     {  
  90.         Train ntrain = new NorthTrain();  
  91.         Train strain = new SouthTrain();  
  92.         Lead nLead = new NorthLead();  
  93.         Lead sLead = new SouthLead();  
  94.         nLead.tryManage(ntrain);  
  95.         sLead.tryManage(strain);  
  96.         nLead.tryManage(strain);  
  97.         sLead.tryManage(ntrain);  
  98.     }  
  99.   
  100. }  

结果:


North Lead 管理 北车
South Lead 管理 南车
North Lead 管理 南车
South Lead 管理 北车


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