知识点
桥
知识内容
将抽象部分和实现部分分离,使它们可以独立变化。桥的特点是双基类,一个抽象,一个实现,抽象的指针指向实现,抽象的具体类利用这个指针获得实现的不同多态实现(如何获得?用实现具体类对象赋给实现抽象类对象的指针)。更优秀一点的,将获取的具体实现类的方法打包成抽象基类的一个方法,然后抽象具体类可以直接使用这个打包好的抽象基类方法来完成实现的工作。
实例
这里的抽象实现类的构造函数需要利用抽象基类的构造函数来实现。
#include<iostream>
using namespace std;
class Implementor //桥的一端 实现基类
{
public:
virtual void OperationImp() = 0; //虚基类 实现方法
};
class Abstraction //桥的另一端 抽象基类
{
protected:
Implementor* imp; //抽象类 通过实现类指针指向实现基类
public:
Abstraction(Implementor* myImp):imp(myImp) {} //构造函数
void Operation() //将实现具体类方法封装进抽象类的方法中
{
imp -> OperationImp();
}
};
class ConcreteImplementorA: public Implementor //实现具体类
{
public:
void OperationImp()
{
cout << "Concrete Implementor A Operation Implemention..." << endl;
}
};
class ConcreteImplementorB: public Implementor //实现具体类
{
public:
void OperationImp()
{
cout << "Concrete Implementor B Operation Implemention..." << endl;
}
};
class RefinedAbstraction: public Abstraction //抽象具体类
{
public:
RefinedAbstraction(Implementor* myImp):Abstraction(myImp){} //抽象具体类构造函数,利用抽象基类构造具体类
void method()
{
Abstraction::Operation(); //调用实现类的方法
cout << "Refined Abstraction method..." << endl; //进行本身的操作
}
};
int main()
{
Implementor* implementorA = new ConcreteImplementorA(); //构造具体实现类指针
Implementor* implementorB = new ConcreteImplementorB();
//利用具体实现类指针构造具体抽象类对象指针(注:不指向抽象基类,因为基类没有具体抽象类的方法)
RefinedAbstraction* refinedAbstraction1 = new RefinedAbstraction(implementorA);
//具体实现类调用方法
refinedAbstraction1 -> method();
RefinedAbstraction* refinedAbstraction2 = new RefinedAbstraction(implementorB);
refinedAbstraction2 -> method();
return 0;
}
链接
https://github.com/xierensong/learngit/blob/master/DPattern/5/1.cpp