基本概念
建造者模式是一種創建型設計模式,它允許你創建復雜對象的過程獨立于該對象的組成部分以及它們的組裝方式。這樣可以構造出不同的對象表示。
在建造者模式中,將創建對象的過程和對象的表示分離,通過一步步的構建,可以得到不同的對象。
建造者模式需要實現以下結構:
- 指揮者(Director):負責使用建造者對象構建最終的復雜對象,它不關心具體的構建過程。
- 建造者(Builder):定義了構建復雜對象各個部分的接口。
- 具體建造者(Concrete Builder):實現了建造者定義的接口。
- 產品(Product):表示被構建的復雜對象。
使用場景
- 構建過程比較復雜時。
- 構建過程需要獨立于對象的組成部分以及它們的裝配方式時。
- 構建過程中的一些步驟是可選的或可變的時。
- 構建的對象需要具有不同的表現形式時。
- 需要將構建過程封裝在一個獨立的組件中時。
實現
使用建造者模式創建一個對話框的例子如下:
// 具體建造者(Concrete Builder)
class DialogBuilder {
public:DialogBuilder() : dialog(new QDialog) {}void setTitle(const QString& title) {dialog->setWindowTitle(title);}void setMessage(const QString& message) {QLabel* label = new QLabel(message);layout.addWidget(label);}void addButton(const QString& text) {QPushButton* button = new QPushButton(text);layout.addWidget(button);QObject::connect(button, &QPushButton::clicked, dialog, &QDialog::accept);}QDialog* getResult() {dialog->setLayout(&layout);return dialog;}private:QDialog* dialog;QVBoxLayout layout;
};// 指揮者(Director)
class DialogDirector {
public:DialogDirector(DialogBuilder* builder) : builder(builder) {}QDialog* construct(const QString& title, const QString& message, const QString& buttonText) {builder->setTitle(title);builder->setMessage(message);builder->addButton(buttonText);return builder->getResult();}private:DialogBuilder* builder;
};int main(int argc, char *argv[]) {QApplication app(argc, argv);DialogBuilder builder;DialogDirector director(&builder);// 使用指揮者構建復雜對象QDialog* dialog = director.construct("Title", "Message", "OK");dialog->show();return app.exec();
}
這個例子省略了抽象的建造者,可以創建出qt對話框。