一天学习一个设计模式之桥接模式

  桥接模式(Bridge),将抽象部分与它的实现部分分离,使它们都可以独立地变化。什么叫抽象与它的实现分离?这并不是说,让抽象类与其派生类分离,实现指的是抽象类和它的派生类用来实现自己的对象。

  以手机为例。手机有各个品牌,手机又得实现各种软件的运行。

  由于实现的方式 有多种,桥接模式的核心意图就是把这些实现独立出来,让它们各自地变化。这就使得每种实现的变化不会影响其他实现,从而达到应对变化的目的。

1 /**
2  * 手机软件接口
3  */
4 public interface IHandsetSoft {
5     void run();
6 }
1 /**
2  * 手机游戏(属于软件)
3  */
4 public class HandsetGame implements IHandsetSoft {
5     @Override
6     public void run() {
7         System.out.println("运行手机游戏");
8     }
9 }

 

1 /**
2  * 手机通讯录
3  */
4 public class HandsetAddressList implements IHandsetSoft {
5     @Override
6     public void run() {
7         System.out.println("运行手机通讯录");
8     }
9 }
1 public class HandsetMP3 implements IHandsetSoft {
2     @Override
3     public void run() {
4         System.out.println("运行MP3");
5     }
6 }
1 public abstract class HandsetBrand {
2     IHandsetSoft soft;
3     //安装手机软件
4     public void setHandsetSoft(IHandsetSoft soft){
5         this.soft=soft;
6     }
7     //运行
8     public abstract void run();
9 }
1 /**
2  * 手机品牌华为
3  */
4 public class HandsetBrandHuawei extends HandsetBrand{
5     @Override
6     public void run() {
7         soft.run();
8     }
9 }
1 public class HandsetBrandXiaoMi extends HandsetBrand {
2     @Override
3     public void run() {
4         soft.run();
5     }
6 }

 

 

 1 public class Client {
 2     public static void main(String[] args) {
 3         HandsetBrand ab;
 4         ab=new HandsetBrandHuawei();
 5         //华为安装游戏软件
 6         ab.setHandsetSoft(new HandsetGame());
 7         ab.run();
 8         //华为安装通讯录软件
 9         ab.setHandsetSoft(new HandsetAddressList());
10         ab.run();
11 
12         ab=new HandsetBrandXiaoMi();
13         //小米安装游戏软件
14         ab.setHandsetSoft(new HandsetGame());
15         ab.run();
16         //小米安装游戏软件
17         ab.setHandsetSoft(new HandsetAddressList());
18         ab.run();
19         //小米安装游戏软件
20         ab.setHandsetSoft(new HandsetMP3());
21         ab.run();
22     }
23 }

      桥接是一个接口,它与一方应该是绑定的,也就是解耦的双方中的一方必然是继承这个接口的,这一方就是实现方,而另一方正是要与这一方解耦的抽象方,如果不采用桥接模式,一般我们的处理方式是直接使用继承来实现,这样双方之间处于强链接,类之间关联性极强,如要进行扩展,必然导致类结构急剧膨胀。采用桥接模式,正是为了避免这一情况的发生,将一方与桥绑定,即实现桥接口,另一方在抽象类中调用桥接口(指向的实现类),这样桥方可以通过实现桥接口进行单方面扩展,而另一方可以继承抽象类而单方面扩展,而之间的调用就从桥接口来作为突破口,不会受到双方扩展的任何影响

posted on 2017-12-08 15:42  罗伯特☆狗剩  阅读(115)  评论(0编辑  收藏  举报

导航