中小型网站建设价位,深圳市住建局官网入口,哪家公司做直播间网站,公司有多少做网站目录
1、桥接模式#xff08;Bridge Pattern#xff09;含义
2、桥接模式应用场景
3、桥接模式的UML图学习
4、C实现桥接模式的示例 1、桥接模式#xff08;Bridge Pattern#xff09;含义
桥接模式是一种结构型设计模式#xff0c;它将抽象部分与实现部分分离#…目录
1、桥接模式Bridge Pattern含义
2、桥接模式应用场景
3、桥接模式的UML图学习
4、C实现桥接模式的示例 1、桥接模式Bridge Pattern含义
桥接模式是一种结构型设计模式它将抽象部分与实现部分分离使它们可以独立地变化。
2、桥接模式应用场景
1当你希望抽象部分和实现部分可以独立地扩展和变化时可以使用桥接模式。它可以让抽象部分和实现部分可以独立地进行演化而不会相互影响。
2当一个类存在多个维度的变化且每个维度都需要独立地进行扩展时可以考虑使用桥接模式。通过将每个维度的变化抽象为不同的继承层次结构然后通过桥接模式将这些继承层次结构连接起来可以灵活地组合不同的变化。
3当需要在运行时动态地选择或切换抽象部分和实现部分的关系时可以使用桥接模式。通过将抽象部分和实现部分解耦并通过组合的方式建立关联可以在运行时灵活地选择具体的实现。
4当希望对抽象部分和实现部分进行共享和复用时可以考虑使用桥接模式。通过将抽象部分和实现部分分离可以使它们可以独立地进行复用从而提高代码的可维护性和可扩展性。
总的来说桥接模式适用于抽象部分和实现部分需要独立演化、存在多个维度的变化、需要动态选择关系或希望进行共享和复用的场景。它可以提供更好的灵活性、可扩展性和可维护性。
3、桥接模式的UML图学习 在上述UML类图中有以下几个关键角色 Abstraction抽象类定义了抽象部分的接口并包含一个指向Implementor的成员变量。它的具体子类可以通过调用Implementor的方法来实现自己的操作。 Implementor实现类接口定义了实现部分的接口它通常只提供了一些基本的操作方法。 ConcreteImplementorA、ConcreteImplementorB具体实现类实现了Implementor接口具体实现了实现部分的操作方法。 RefinedAbstractionA、RefinedAbstractionB扩展抽象类继承自Abstraction并通过调用Implementor的方法来实现自己的操作。
在桥接模式中抽象部分和实现部分通过关联关系连接在一起而不是继承关系。这样可以使得抽象部分和实现部分可以独立地变化和演化。
4、C实现桥接模式的示例 #include iostream
#include string// 实现接口
class Implementor
{
public:virtual void operationImpl() const 0;
};// 具体实现类A
class ConcreteImplementorA : public Implementor
{
public:void operationImpl() const override {std::cout ConcreteImplementorA: operationImpl std::endl;}
};// 具体实现类B
class ConcreteImplementorB : public Implementor
{
public:void operationImpl() const override {std::cout ConcreteImplementorB: operationImpl std::endl;}
};// 抽象类
class Abstraction {
protected:Implementor* m_implementor;public:Abstraction(Implementor* implementor) : m_implementor(implementor) {}virtual void operation() const 0;
};// 扩展抽象类A
class RefinedAbstractionA : public Abstraction
{
public:RefinedAbstractionA(Implementor* implementor) : Abstraction(implementor) {}void operation() const override {std::cout RefinedAbstractionA: ;m_implementor-operationImpl();}
};// 扩展抽象类B
class RefinedAbstractionB : public Abstraction
{
public:RefinedAbstractionB(Implementor* implementor) : Abstraction(implementor) {}void operation() const override {std::cout RefinedAbstractionB: ;m_implementor-operationImpl();}
};int main()
{// 创建具体实现类对象Implementor* implementorA new ConcreteImplementorA();Implementor* implementorB new ConcreteImplementorB();// 使用扩展抽象类A调用操作Abstraction* abstractionA new RefinedAbstractionA(implementorA);abstractionA-operation();// 使用扩展抽象类B调用操作Abstraction* abstractionB new RefinedAbstractionB(implementorB);abstractionB-operation();delete implementorA;delete implementorB;delete abstractionA;delete abstractionB;return 0;
}
在上述示例中我们首先定义了实现接口Implementor其中包含了一个纯虚函数operationImpl()。然后我们实现了两个具体的实现类ConcreteImplementorA和ConcreteImplementorB它们分别继承自实现接口并实现了接口中的纯虚函数。
接着我们定义了抽象类Abstraction其中包含了一个指向实现接口的指针并声明了一个纯虚函数operation()。然后我们通过扩展抽象类ARefinedAbstractionA和扩展抽象类BRefinedAbstractionB来实现具体的抽象类它们分别继承自抽象类并实现了抽象类中的纯虚函数。
在主函数中我们创建了具体的实现类对象implementorA和implementorB然后通过扩展抽象类A和扩展抽象类B来调用操作。在调用操作时实际上会调用到具体的实现类中的具体函数。