Ваш пример немного неполный и содержит ошибку. Во-первых, в классе ConcreteImplementor2 не указано наследование от класса Implementor. Во-вторых, в классе RefinedAbstraction метод Operation должен вызывать метод OperationImp у объекта implement, который указывает на реализацию операции в классе ConcreteImplementor1 или ConcreteImplementor2.
Исправленный пример:
class Implementor { public: virtual ~Implementor() {}; virtual void OperationImp() = 0; }; class Abstraction { public: virtual ~Abstraction() {}; virtual void Operation() = 0; protected: Implementor* implement; }; class RefinedAbstraction : public Abstraction { public: void Operation() { implement->OperationImp(); } }; class ConcreteImplementor1 : public Implementor { public: void OperationImp() { //... код реализации операции } }; class ConcreteImplementor2 : public Implementor { public: void OperationImp() { //... код реализации операции } };
Этот исправленный пример демонстрирует правильную структуру для паттерна Мост (Bridge).
Ваш пример немного неполный и содержит ошибку. Во-первых, в классе ConcreteImplementor2 не указано наследование от класса Implementor. Во-вторых, в классе RefinedAbstraction метод Operation должен вызывать метод OperationImp у объекта implement, который указывает на реализацию операции в классе ConcreteImplementor1 или ConcreteImplementor2.
Исправленный пример:
class Implementor {public:
virtual ~Implementor() {};
virtual void OperationImp() = 0;
};
class Abstraction {
public:
virtual ~Abstraction() {};
virtual void Operation() = 0;
protected:
Implementor* implement;
};
class RefinedAbstraction : public Abstraction {
public:
void Operation() {
implement->OperationImp();
}
};
class ConcreteImplementor1 : public Implementor {
public:
void OperationImp() {
//... код реализации операции
}
};
class ConcreteImplementor2 : public Implementor {
public:
void OperationImp() {
//... код реализации операции
}
};
Этот исправленный пример демонстрирует правильную структуру для паттерна Мост (Bridge).