seo网站推广软件排名,软件开发前端和后端区别,ps自学网官方网站,做海报找素材的网站概念 Bridge 模式又叫做桥接模式#xff0c;是构造型的设计模式之一。Bridge模式基于类的最小设计原则#xff0c;通过使用封装#xff0c;聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象#xff08;abstraction#xff09;与行为实现#xff08;i…概念 Bridge 模式又叫做桥接模式是构造型的设计模式之一。Bridge模式基于类的最小设计原则通过使用封装聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象abstraction与行为实现implementation分离开来从而可以保持各部分的独立性以及应对它们的功能扩展。 角色和职责 Client Bridge模式的使用者 Abstraction 抽象类接口接口或抽象类维护对行为实现Implementor的引用 Refined Abstraction Abstraction子类 Implementor 行为实现类接口 (Abstraction接口定义了基于Implementor接口的更高层次的操作) ConcreteImplementor Implementor子类 适用于 桥接模式Bridge Pattern是将抽象部分与实现部分分离解耦合使它们都可以独立的变化。 车 安装 发动机 不同型号的车安装不同型号的发动机 图形 填 颜色 不同形状的图形填充上 不同的颜色 将“车 安装 发动机”这个抽象 和 实现进行分离两个名字 就设计两个类 将“图形 填 颜色”这个抽象 和 实现 进行分离两个名字就设计两个类 案例 //不同的车型不同型号安装不同类型的发动机 #include iostream
using namespace std;class MyCar1
{
public:virtual void installEngine() 0;
};class BMW5 : public MyCar1
{
public:virtual void installEngine(){cout BMW5 3500CC endl;}
};class BMW6 : public MyCar1
{
public:virtual void installEngine(){cout BMW6 4000CC endl;}
};class Jeep11 : public MyCar1
{
public:virtual void installEngine(){cout Jeep11 1100CC endl;}
};class Jeep12 : public MyCar1
{
public:virtual void installEngine(){cout Jeep12 1200CC endl;}
};//不同的车型不同型号安装不同类型的发动机会引起子类的泛滥
//问题引出
void main1601()
{Jeep12 *j12 new Jeep12;j12-installEngine();delete j12;return ;
}class MyCar2
{public:virtual void installEngine3500() 0;virtual void installEngine4000() 0;virtual void installEngine1100() 0;virtual void installEngine1200() 0;
};class BMW : public MyCar2
{
public:virtual void installEngine3500(){cout 3500CC endl;}virtual void installEngine4000(){cout 4000CC endl;}virtual void installEngine1100() {cout 1100CC endl;}virtual void installEngine1200(){cout 1200CC endl;}
};//这样的设计 不符合开闭原则
void main1602()
{BMW *bmw5 new BMW;bmw5-installEngine3500();
}//需要把“安装发动机”这个事做很好的分解把抽象 和 行为实现 分开
//发动机是一个名次专门抽象成一个类类中含有一个成员函数安装发动机class Engine
{
public:virtual void installEngine() 0;
};class Engine4000 : public Engine
{
public:virtual void installEngine(){cout 安装发动机 Engine4000 endl;}
};class Engine3500 : public Engine
{
public:virtual void installEngine(){cout 安装发动机 Engine 3500 endl;}
};class Car
{
public:Car(Engine *pengine){m_engine pengine;}virtual void installEngine() 0;protected:Engine *m_engine;
};class BMW7 :public Car
{
public:BMW7(Engine *p) : Car(p){}//注意车的安装 和 发动机的安装 不同之处virtual void installEngine(){cout BMW7 ; m_engine-installEngine();}
protected:
private:
};void main163()
{Engine4000 *e4000 new Engine4000;BMW7 *bmw7 new BMW7(e4000);bmw7-installEngine();delete bmw7;delete e4000;
}
void main()
{//main1601();//main1602();main163();system(pause);
}转载于:https://www.cnblogs.com/gd-luojialin/p/10357987.html