設計模式的 C 實現 建造者模式

2021-10-09 09:42:05 字數 2787 閱讀 3853

前文回顧

單例模式(一)

單例模式(二)

觀察者模式

簡單工廠模式

工廠方法模式(一)

工廠方法模式(二)

抽象工廠模式(一)

抽象工廠模式(二)

原型模式

外觀模式

中介者模式

**模式

裝飾者模式

策略模式

狀態模式

命令模式

建造者模式的本質是乙個物件的構造過程是相對不變的、客戶端只是物件的消費者,不關心物件的建立過程,僅提出需求獲取物件即可,每一種需求即為一張配方,根據配方進行物件的建立。

場景描述

以電腦組裝過程為例:電腦的構成是不變的,但根據配置需求可以有不同的組裝方式。

物件類

#include

#include

using

namespace std;

class

computer

void

setcpu

(const string &m_cpu)

void

setdisk

(const string &m_disk)

void

setmainboard

(const string &m_mainboard)

void

setdisplay

(const string &m_display)

void

setram

(const string &m_ram)

void

setsystem

(const string &m_system)

void

showcopmtuter()

private

: string mainboard;

string cpu;

string disk;

string display;

string ram;

string system;

};

建立者基類

#include

#include

"computer.h"

using

namespace std;

class

computerbuilder

virtual

~computerbuilder()

virtual

void

buildcpu()

=0;virtual

void

builddisk()

=0;virtual

void

buildmainboard()

=0;virtual

void

builddisplay()

=0;virtual

void

buildram()

=0;virtual

void

buildsystem()

=0;virtual computer *

getcomputer()

=0;protected

: computer *m_computer;

};

建立者派生類

#include

"computerbuilder.h"

//配方1

class

computerbuilderone

:public computerbuilder

void

buildcpu

() override

void

buildram

() override

void

builddisk

() override

void

builddisplay

() override

void

buildsystem

() override

computer *

getcomputer

() override

};

指揮者類

#include

"computerbuilder.h"

#include

class

computerbuilderdirector

computer *

constructcomputer()

void

setbuilder

(shared_ptr m_builder)

private

: shared_ptr builder;

};

客戶端呼叫

設計模式 建造者模式C 實現

將乙個複雜物件的構建和他的表示分離,使得同樣的構建過程可以創造不同的表示 注 在模板方法中,實現了父類呼叫子類方法的功能,且,通過鉤子實現了方法的選擇性呼叫。但是其中整體的順序固定的,先做什麼再做什麼,不用做的通過鉤子遮蔽。而創造者模式就是對這個固定順序進行調整使得其更好工作的乙個模式。角色分工 p...

設計模式C 實現(6) 建造者模式

軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...

設計模式C 實現(6) 建造者模式

軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...