设计模式 (十一)桥模式(birdge)

简单的桥模式(birdge)将抽象与其实现解耦合,使他们的可以独立地变化,中文里把派生类叫做抽象的实现,而桥模式中所讲的实现恰恰不是这个意思,桥模式中的抽象类及派生类,实现指的是这些抽象类及派生类实现自己的方式。

简单的桥模式(birdge)的原理图



下面是关于这个模式的简单的一个例子程序,有一个鼠标抽象类,其这个鼠标分别属于联想和宏基生产的,这样用桥模式通过组合和继承,简单的实现了这种逻辑关系,并且达到了良好的复用,其实在实现的原理方面和上一个模--------装饰模式的实现原理是一样的:

[java] view plaincopy
  1. package com.designpattern.bridge;  
  2.   
  3. public abstract class Mouse {  
  4.   
  5.     private Computer computer;  
  6.   
  7.     public Mouse(Computer computer) {  
  8.         this.computer = computer;  
  9.     }  
  10.   
  11.     public void produce() {  
  12.         this.computer.produce();  
  13.     }  
  14. }  

[java] view plaincopy
  1. package com.designpattern.bridge;  
  2.   
  3. public interface Computer {  
  4.     public void produce();  
  5. }  

[java] view plaincopy
  1. package com.designpattern.bridge;  
  2.   
  3. public class BlackMouse extends Mouse {  
  4.   
  5.     public BlackMouse(Computer computer) {  
  6.         super(computer);  
  7.     }  
  8.   
  9.     @Override  
  10.     public void produce() {  
  11.         super.produce();  
  12.         System.out.println("blackMouse");  
  13.     }  
  14.   
  15. }  

[java] view plaincopy
  1. package com.designpattern.bridge;  
  2.   
  3. public class RedMouse extends Mouse {  
  4.   
  5.     public RedMouse(Computer computer) {  
  6.         super(computer);  
  7.     }  
  8.   
  9.     @Override  
  10.     public void produce() {  
  11.         super.produce();  
  12.         System.out.println("redMouse");  
  13.     }  
  14.   
  15. }  

[java] view plaincopy
  1. package com.designpattern.bridge;  
  2.   
  3. public class Lenovo implements Computer {  
  4.   
  5.     @Override  
  6.     public void produce() {  
  7.         System.out.print("Lenovo's ");  
  8.   
  9.     }  
  10.   
  11. }  

[java] view plaincopy
  1. package com.designpattern.bridge;  
  2.   
  3. public class Acer implements Computer {  
  4.   
  5.     @Override  
  6.     public void produce() {  
  7.         System.out.print("Acer's ");  
  8.   
  9.     }  
  10.   
  11. }  

[java] view plaincopy
  1. package com.designpattern.bridge;  
  2.   
  3. public class Client {  
  4.     public static void main(String[] args) {  
  5.         new BlackMouse(new Lenovo()).produce();  
  6.         new RedMouse(new Lenovo()).produce();  
  7.         new BlackMouse(new Acer()).produce();  
  8.         new RedMouse(new Acer()).produce();  
  9.     }  
  10. }  

使用桥模式,能够提供比使用继承关系更灵活的功能,他可以使抽象和实现分离开,降低了耦合关系。当有新的抽象类或实现方式时,之需要集成一个抽象和继承一个实现即可。

如果如需重新抽象出另外的一个类型,则需要修改抽象。比如前面除了电脑品牌和鼠标之外,还可以把鼠标分为无线和有线,此时就需要重新抽象出一个类型来。

展开阅读全文

没有更多推荐了,返回首页