桥模式 UML 及其源码

桥模式:将某个问题抽象的不同形式分别与该问题的具体实现部分相分离,使他们都可以独立变化,并能够动态结合。

      例如电视厂商海尔,长虹生产21寸,29寸电视机。从这里要将它们分离出来,就用到桥模式。电视机与电视机生产厂商挂桥,从而,分离出不同厂商的实现,与不同电视机型号的实现.

     下面看下uml

 

 

从上图可以看出,将实际抽象分离出来。

看下代码

创建电视机

Java代码 复制代码
  1. public abstract class Television {   
  2.     //电视厂商   
  3.     protected TelevisionMaker televisionMaker;   
  4.     //收看电视   
  5.     abstract public void teleview(TelevisionMaker televisionMaker);   
  6. }  
接下来创建生产厂商
Java代码 复制代码
  1. public abstract class TelevisionMaker {   
  2.     abstract public void produce();   
  3. }  
电视机的型号,即继承电视机类
Java代码 复制代码
  1. public class Inch21 extends Television{   
  2.        
  3.     public void teleview(TelevisionMaker televisionMaker) {   
  4.         System.out.println("21寸电视");   
  5.     }   
  6.   
  7. }  
Java代码 复制代码
  1. public class Inch29 extends Television{   
  2.        
  3.     public void teleview(TelevisionMaker televisionMaker) {   
  4.         System.out.println("29寸电视");   
  5.     }   
  6.   
  7. }  
下面是不同厂商,即继承生产厂商

 

Java代码 复制代码
  1. public class ChangHong extends TelevisionMaker{   
  2.   
  3.     public ChangHong(){   
  4.         System.out.println("长虹厂商");   
  5.     }   
  6.        
  7.     public void produce() {   
  8.         System.out.println("长虹厂商");   
  9.     }   
  10. }  
 
Java代码 复制代码
  1. public class Haier extends TelevisionMaker{   
  2.     public Haier(){   
  3.         System.out.println("海尔厂商");   
  4.     }   
  5.        
  6.     public void produce() {   
  7.         System.out.println("海尔厂商");   
  8.     }   
  9.   
  10. }  
 

这样就使用了桥模式,将原本繁杂的系统分离开来。如果根据需求变动,要增加电视机生产型号或者电视机生产厂商,只需要实现相对应的抽象类即可。

这样,我们也可以根据用户的需要,得到他所需要的电视机,如长虹厂商出厂的29寸电视机。

测试代码如下:

 
  1. public class Client {   
  2.   
  3.     public static void main(String[] args) {   
  4.         // TODO Auto-generated method stub   
  5.          BridgePattern bp = new BridgePattern();
             Inch29 i = bp.new Inch29();  
             i.teleview(bp.new ChangHong()); 
             Inch21 j = bp.new Inch21();  
             j.teleview(bp.new Haier()); 
         }  
  6. }  

 结果:

长虹厂商
29寸电视
海尔厂商
21寸电视

 

文章来源:http://www.javaeye.com/topic/286013  原文章中测试程序有点点小问题,我改了改,以上是可以正确运行的 环境:myeclipse

posted on 2010-01-26 11:35  蜗牛与老鹰  阅读(319)  评论(0)    收藏  举报

导航