您的位置:首页 > 其它

设计模式读书笔记(四) Bridge(桥梁)模式

2016-07-13 15:52 513 查看

一、模式介绍

GOF 在《设计模式》中给桥梁模式的定义为:将抽象部分与它的实现部分分离,使它 们都可以独立地变化。这里的抽象部分和实现部分不是我们通常认为的父类与子类、接口与 实现类的关系,而是组合关系。也就是说,实现部分是被抽象部分调用,以用来完成(实现) 抽象部分的功能

简单来说,桥梁模式就是为了降低耦合,让抽象与实现相分离,使得两者都能够各自变化

二、例子实现

假设我现在有两台电脑,一台是预装windows系统的,一台是预装ios系统的,其实可以用继承来实现不同的电脑和系统,但是如果是我要生产出3个品牌的电脑,然后每个品牌的电脑有3个不同的系统进行预售,很好理解,如果是继承的方式,我们需要9个子类,但是如果是采用了桥梁的模式,我们就只需要6个子类即可。下面我们来看一个简单的例子:

我们需要有一个Computer的父类,来定义每一台电脑公共的属性,另外,还需要有一个OS的类来实现每一台电脑预装的系统:

class OS;

class Computer
{
public:
Computer(){};
virtual ~Computer(){};

virtual void InstallOS(OS *os) = 0;

protected:
OS *operaSystem;
};

class Apple :public Computer
{
public :
Apple();
~Apple();

void InstallOS(OS *os);

};

class Microsoft :public Computer
{
public:
Microsoft();
~Microsoft();

void InstallOS(OS *os);

};


class OS
{
public:
OS(){};
virtual ~OS(){};

virtual void Work() = 0;
};

class Windows :public OS
{
public:
Windows();
~Windows();

void Work();
};

class IOS :public OS
{
public:
IOS();
~IOS();

void Work();
};


下面是实现的部分:

IOS::IOS() :OS()
{

}

IOS::~IOS()
{

}

void IOS::Work()
{
cout << "I'm working with IOS " << endl;
}

Windows::Windows() :OS()
{

}

Windows::~Windows()
{

}

void Windows::Work()
{
cout << "I'm working with Windows " << endl;
}


Apple::Apple() :Computer()
{
cout << "I'm Mac!" << endl;
}

Apple::~Apple()
{
if (operaSystem)
delete operaSystem;
}

void Apple::InstallOS(OS *os)
{
operaSystem = os;
operaSystem->Work();
}

Microsoft::Microsoft() :Computer()
{
cout << "I'm Microsoft!" << endl;
}

Microsoft::~Microsoft()
{
if (operaSystem)
delete operaSystem;
}

void Microsoft::InstallOS(OS *os)
{
operaSystem = os;
operaSystem->Work();
}


接下来是调用部分:

#include "OS.h"
#include "Computer.h"

int main()
{
Computer *lenovo = new Microsoft();
lenovo->InstallOS(new Windows());

Computer *Mac = new Apple();
Mac->InstallOS(new IOS());

delete lenovo;
delete Mac;
getchar();
}


这样就实现了抽象和实现的分离,关于这次的代码,可以到github上下载:

这里写链接内容
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息