概念:
桥接模式是构造型的设计模式之一。Bridge模式基于类的最小设计原则,遵循开闭原则(类的改动通过增加代码来实现,而不是修改源代码),通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,
从而可以保持各部分的独立性以及应对它们的功能扩展。
接口实现:
Client 使用者
Abstraction base 抽象基类接口 (内含Implementor base 成员类)
Abstraction 抽象子类 (通过构造分配不同的行为,从而实现不同的行为)
Implementor base 行为实现基类接口
Implementor 行为实现子类
优势:
桥接模式是构造型的设计模式之一。Bridge模式基于类的最小设计原则,遵循开闭原则(类的改动通过增加代码来实现,而不是修改源代码),通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,
从而可以保持各部分的独立性以及应对它们的功能扩展。
接口实现:
Client 使用者
Abstraction base 抽象基类接口 (内含Implementor base 成员类)
Abstraction 抽象子类 (通过构造分配不同的行为,从而实现不同的行为)
Implementor base 行为实现基类接口
Implementor 行为实现子类
优势:
当抽象类需要更换行为时,不需要添加额外代码即可立即实现。
实现:
#include "stdafx.h"
#include <iostream>
using namespace std;
//把抽象(各个课程类) 和 行为实现(使用语言上课) 分开
//语言是一个名次,专门抽象成一个类;类中含有一个成员函数,使用它来上课
class Language//语言基类
{
public:
virtual void useLanguage() = 0;//使用各种语言接口
};
class Chinese : public Language
{
public:
virtual void useLanguage()
{
cout << "使用了中文" << endl;
}
};
class English : public Language
{
public:
virtual void useLanguage()
{
cout << "使用了英语" << endl;
}
};
class Course //各个课程的课程基类
{
public:
Course(Language *_lang)
{
m_lang = _lang;
}
virtual void useLanguage() = 0;
protected:
Language *m_lang;//包含语言这个行为
};
class Math :public Course
{
public:
Math(Language *p) : Course(p){ }
virtual void useLanguage()
{
cout << "数学课 " ;
m_lang->useLanguage();
}
};
class Physics:public Course
{
public:
Physics(Language *p) : Course(p){ }
virtual void useLanguage()
{
cout << "物理课 " ;
m_lang->useLanguage();
}
};
void main()
{
Chinese *_ch = new Chinese;
Math *_ma = new Math(_ch);
_ma->useLanguage();
English *_Eng = new English;
Physics *_ph = new Physics(_Eng);
_ph->useLanguage();
delete _ch;
delete _ma;
delete _Eng;
delete _ph;
system("pause");
}