3小时网站建设平台,儿童编程培训班,大连免费建站,在线咨询 1 网站宣传文章目录 一、建造者模式基础知识建造者模式的结构建造者模式的应用场景 一、建造者模式基础知识
建造者模式#xff08;Builder Pattern#xff09;是一种创建型设计模式#xff0c;它提供了一种优雅的方式来创建复杂对象#xff0c;同时隐藏其构建过程。这种模式允许你通… 文章目录 一、建造者模式基础知识建造者模式的结构建造者模式的应用场景 一、建造者模式基础知识
建造者模式Builder Pattern是一种创建型设计模式它提供了一种优雅的方式来创建复杂对象同时隐藏其构建过程。这种模式允许你通过指定复杂对象的类型和内容来构建它们然后分步骤创建复杂对象的各个部分。
建造者模式的结构
建造者模式通常包含以下角色 产品Product需要构建的复杂对象。 建造者Builder提供一个接口用于创建和表示产品的不同部分。 具体建造者ConcreteBuilder实现建造者接口定义产品对象的各个部分的构建和表示。 指挥者Director负责安排已有模块的建造过程不涉及具体的构建细节。 客户端Client使用指挥者和建造者来创建复杂对象。
建造者模式的应用场景
创建复杂对象当对象的构建过程复杂或者对象本身包含多个成员变量时。
相同的方法不同的执行顺序不同的执行顺序可能会导致不同的结果。
分步骤构建需要分步骤构建对象每一步都可以独立进行。
隔离复杂对象的构建和表示客户端不需要知道对象是如何构建的只需要知道如何使用它。#pragma once#include iostream
#include string.husing namespace std;class Phone // 电话类
{
public:Phone();~Phone();void setCamera(string camera);void setBattery(string battery);void setScreen(string screen);void PrintCamera();void PrintBattery();void PrintScreen();private:string strCamera; // 摄像头string strBattery; // 电池string strScreen; // 屏幕
};//----------------------#include Phone.hPhone::Phone(){cout 调用Phone类的构造函数. endl;
}Phone::~Phone() {cout 调用Phone类的析构函数. endl;
}void Phone::setCamera(string camera) {strCamera camera;
}void Phone::setBattery(string battery) {strBattery battery;
}void Phone::setScreen(string screen)
{strScreen screen;
}void Phone::PrintCamera() {cout Camera-- strCamera.c_str() endl;
}void Phone::PrintBattery() {cout Battery-- strBattery.c_str() endl;
}void Phone::PrintScreen() {cout Screen-- strScreen.c_str() endl;
}
#pragma once#include Phone.hclass Fbuilder // 基类
{
public:Fbuilder();~Fbuilder();protected:Phone* phone; // 电话对象public:virtual void buildCamera() 0;virtual void buildBattery() 0;virtual void buildScreen() 0;virtual Phone* GetPhone();};class IphoneBuilder :public Fbuilder { // 苹果派生类
public:IphoneBuilder();void buildCamera();void buildBattery();void buildScreen();
};class HuaweiBuilder :public Fbuilder { // 华为派生类
public:HuaweiBuilder();void buildCamera();void buildBattery();void buildScreen();
};//------------------------------
#include Fbuilder.hFbuilder::Fbuilder(){}Fbuilder::~Fbuilder() {}Phone* Fbuilder::GetPhone()
{return phone;
}IphoneBuilder::IphoneBuilder() {phone new Phone;
}
void IphoneBuilder::buildCamera() {phone-setCamera(Iphone Camera Created.);
}
void IphoneBuilder::buildBattery() {phone-setBattery(Iphone Battery Created.);
}
void IphoneBuilder::buildScreen() {phone-setScreen(Iphone Screen Created.);
}HuaweiBuilder::HuaweiBuilder() {phone new Phone;
}
void HuaweiBuilder::buildCamera() {phone-setCamera(Huawei Camera Created.);
}
void HuaweiBuilder::buildBattery() {phone-setBattery(Huawei Battery Created.);
}
void HuaweiBuilder::buildScreen() {phone-setScreen(Huawei Screen Created.);
}
#pragma once#include Fbuilder.hclass Director {
public:Director();Director(Fbuilder* builder);~Director();void CreateFunc(Fbuilder* builder);void CreateFunc();private:Fbuilder *dbuilder;
};//---------------------------#include Director.hDirector::Director() {}// 另一种初始化Director::Director(Fbuilder* builder):dbuilder(builder)
Director::Director(Fbuilder* builder) {dbuilder builder;
}Director::~Director() {}void Director::CreateFunc(Fbuilder* builder)
{builder-buildCamera();builder-buildBattery();builder-buildScreen();
}void Director::CreateFunc()
{dbuilder-buildCamera();dbuilder-buildBattery();dbuilder-buildScreen();
}#include iostream
using namespace std;#include Phone.h
#include Director.h
#include Fbuilder.hint main()
{Fbuilder* huawei new HuaweiBuilder;Fbuilder* iphone new IphoneBuilder;Director* director new Director;director-CreateFunc(huawei);director-CreateFunc(iphone);Phone* huaweiphone huawei-GetPhone();Phone* iphonephone iphone-GetPhone();huaweiphone-PrintCamera();huaweiphone-PrintScreen();huaweiphone-PrintBattery();cout endl;iphonephone-PrintCamera();iphonephone-PrintScreen();iphonephone-PrintBattery();return 0;
}