代码改变世界

桥接模式

2015-01-27 14:54  itwolf  阅读(358)  评论(0编辑  收藏  举报

一、概述

1、桥接模式将抽象部分与它的实现部分分离,使它们都可以独立的变化。

2、在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,桥接模式把这种多维度分离出来,让他们独立变化,减少之间的耦合。

感觉桥接模式的结构有点像抽象工厂模式,但桥接模式属于结构型模式,而抽象工厂模式属于创建型模式。

3、UML

 

4、所属类别:结构型

二、C++程序

和抽象工厂中的例子保持一致,这里还以linux、windows系统、手机、电脑为例

 1 // 桥接模式.cpp : 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include<iostream>
 6 using namespace std;
 7 class Ruanjian
 8 {
 9 public:
10     Ruanjian(){}
11     ~Ruanjian(){}
12      virtual void OS()=0;
13 };
14 class Linux :public Ruanjian
15 {
16 public:
17     Linux(){}
18     virtual ~Linux(){}
19     virtual void OS()
20     {
21         cout<<"我运行的是Linux系统"<<endl;
22     }
23 };
24 class Windows :public Ruanjian
25 {
26 public:
27     Windows(){}
28     virtual ~Windows(){}
29     virtual void OS()
30     {
31         cout<<"我运行的是Windows系统"<<endl;
32     }
33 };
34 class Yingjian
35 {
36 public:
37     Yingjian(){}
38     virtual ~Yingjian(){}
39     virtual void run()=0;
40 };
41 class PC:public Yingjian
42 {
43 private:
44     Ruanjian * software;
45 public:
46     PC(Ruanjian* r)
47     {
48         software=r;
49     }
50     virtual ~PC(){}
51     virtual void run()
52     {
53         cout<<"我是一个PC";
54         software->OS();
55     }
56 };
57 class Phone:public Yingjian
58 {
59 private:
60     Ruanjian * software;
61 public:
62     Phone(Ruanjian* r)
63     {
64         software=r;
65     }
66     virtual ~Phone(){}
67     virtual void run()
68     {
69         cout<<"我是一个Phone";
70         software->OS();
71     }
72 };
73 
74 int _tmain(int argc, _TCHAR* argv[])
75 {
76     Linux* l=new Linux();
77     Phone *p=new Phone(l);
78     p->run();
79     return 0;
80 }