桥接模式是什么?"/>
桥接模式是什么?
一、使用场景
拿电脑来举例子。电脑有微软的电脑,联想的电脑。而电脑上可以运行游戏,也可以运行记事本等软件。有两种方式可以实现电脑产品,如下:
方式一:
这种方式耦合性太高,比如像添加一种软件,需要添加微软电脑的软件和联想电脑的软件。同样的像添加一种电脑,也要添加相应的软件。如果要修改一种软件,则要修改很多软件。
方式二,那就是电脑是电脑,软件是软件两者分离。如下图:
很明显方式二耦合性底,容易维护和扩展。这里电脑就相当于抽线,而软件则相当于实现。总的来说就是桥接模式主要是实现系统可能有多个角度分类,每一种分类都有可能变化。那么就把这种多角度分离出来
让它们独立变化,减少它们之间的耦合。
二、定义
多个角度看问题,每一个角度有一个抽象类,抽象类底下具体的类即是各个角度看问题看到的具体内容,同时不同角度看问题的基类是用组合的形式联系起来的,这样子可以替代多个类之间频繁继承的现象,减少类的个数,同时避免因为不断继承打破开闭原则。
三、代码
以电脑和软件为例其示例代码如下:
// BridgeModel.h文件
#pragma once
#include <iostream>class Software
{
public:virtual void run() = 0;
};class SoftwareGame : public Software
{
public:void run(){std::cout << "游戏软件" << std::endl;}
};class SoftwareNote : public Software
{
public:void run(){std::cout << "记事本软件" << std::endl;}
};
//
class Computer
{
protected:Software * m_software;
public:Computer() : m_software(nullptr){}virtual ~Computer(){if (nullptr == m_software)delete m_software;}virtual void run() = 0;void setSoftware(Software *p){m_software = p;}
};class ComputerLenovo : public Computer
{
public:void run(){std::cout << "联想的电脑运行";m_software->run();}
};class ComputerMirco : public Computer
{
public:void run(){std::cout << "微软的电脑运行";m_software->run();}
};
客户端代码如下:
#include <iostream>
#include "BridgeModel.h"int main()
{using namespace std;// 桥接模式Computer *p = new ComputerLenovo();p->setSoftware(new SoftwareGame());p->run();delete p;p = new ComputerMirco();p->setSoftware(new SoftwareNote());p->run();delete p;getchar();return 0;
}
更多推荐
桥接模式是什么?
发布评论