设计模式-1.10桥接模式

桥接模式:bridge,将抽象部分与它的实现部分分离,使它们都可以独立的变化。(DP)

通俗理解:实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。

结构图

 

桥接模式的使用场景

                    1、当一个对象有多个变化因素的时候,通过抽象这些变化因素,将依赖具体实现,修改为依赖抽象。

                    2、当某个变化因素在多个对象中共享时。我们可以抽象出这个变化因素,然后实现这些不同的变化因素。

                    3、当我们期望一个对象的多个变化因素可以动态的变化,而且不影响客户的程序的使用时。

实例一:计算机与操作系统

书上定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化。考虑装操作系统,有多种配置的计算机,同样也有多款操作系统。如何运用桥接模式呢?可以将操作系统和计算机分别抽象出来,让它们各自发展,减少它们的耦合度。当然了,两者之间有标准的接口。这样设计,不论是对于计算机,还是操作系统都是非常有利的。下面给出这种设计的UML图,其实就是桥接模式的UML图。

 1 //操作系统
 2 class OS
 3 {
 4 public:
 5     virtual void InstallOS_Imp() {}
 6 };
 7 class WindowOS: public OS
 8 {
 9 public:
10     void InstallOS_Imp() { cout<<"安装Window操作系统"<<endl; } 
11 };
12 class LinuxOS: public OS
13 {
14 public:
15     void InstallOS_Imp() { cout<<"安装Linux操作系统"<<endl; } 
16 };
17 class UnixOS: public OS
18 {
19 public:
20     void InstallOS_Imp() { cout<<"安装Unix操作系统"<<endl; } 
21 };
22 //计算机
23 class Computer
24 {
25 public:
26     virtual void InstallOS(OS *os) {}
27 };
28 class DellComputer: public Computer
29 {
30 public:
31     void InstallOS(OS *os) { os->InstallOS_Imp(); }
32 };
33 class AppleComputer: public Computer
34 {
35 public:
36     void InstallOS(OS *os) { os->InstallOS_Imp(); }
37 };
38 class HPComputer: public Computer
39 {
40 public:
41     void InstallOS(OS *os) { os->InstallOS_Imp(); }
42 };

  客户使用方式:

1 int main()
2 {
3     OS *os1 = new WindowOS();
4     OS *os2 = new LinuxOS();
5     Computer *computer1 = new AppleComputer();
6     computer1->InstallOS(os1);
7     computer1->InstallOS(os2);
8 }

 

实例二:手机品牌与手机软件

 

补充:

在面向对象中,合成/聚合复用原则:优先使用对象合成/聚合,而不是类继承。这样有助于你保持每个类被封装,并被剧终在单个任务上。这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。

合成(组合、Composition)和聚合(Aggregation)都是关联的特殊种类。

关联:两个类的一般性关系,例如学生和老师就是一种关联关系。

聚合:has-a的关系,是一种相对松散的关系,聚合类不需要对被聚合类负责,使用空的菱形表示聚合关系。

组合:contains-a的关系,关联性强于聚合,组合类和被组合类有相同的生命周期,组合类要对被组合类负责,采用实心的菱形标识组合关系。

链接:

http://www.cnblogs.com/hegezhou_hot/archive/2010/12/10/1902185.html

http://blog.csdn.net/wuzhekai1985/article/details/6670473

 

posted @ 2014-11-27 15:56  SoftWare And Hardware  阅读(819)  评论(2编辑  收藏  举报