考虑到抽象工厂模式,假设您有一个类层次结构,其中具体工厂覆盖 createButton* s * 虚拟方法,需要返回更广泛的按钮数组。由于 C++ 仅支持协变返回类型,有什么优雅的解决方法可以解决这个问题?动态转换?
GoF 示例的修改版本以满足我的要求:
class Button {
public:
virtual void paint() = 0;
virtual ~Button(){
}
};
class WinButton: public Button {
public:
void paint() {
cout << "I'm a WinButton";
}
};
class OSXButton: public Button {
public:
void paint() {
cout << "I'm an OSXButton";
}
};
class GUIFactory {
public:
virtual Button * createButtons() = 0;
virtual ~GUIFactory(){
}
};
class WinFactory: public GUIFactory {
public:
WinButton* createButtons() {
return new WinButton[2];
}
~WinFactory(){
}
};
class OSXFactory: public GUIFactory {
public:
OSXButton* createButtons() {
return new OSXButton[2];
}
~OSXFactory(){
}
};
和应用程序骨架:
Application(GUIFactory * factory) {
Button* buttons = factory->createButtons();
for(...) {...}
}