C++建造者模式(以英雄屬性為例)
建造者模式:將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。建造者模式是一種物件建立型模式。
使用環境:當一個類的建構函式引數個數超過4個,而且這些引數有些是可選的引數,考慮使用構造者模式。
接下來我們以moba類英雄開發的英雄開發為例進行分析,我們知道英雄都有一些基本屬性:攻擊力,防禦力,血量等等,但是同時他們也有一些差別,有些英雄有法力值,而有些英雄沒有;有些英雄有能量值,而有些英雄沒有。我們這時候就可以使用建造者模式來構建英雄類。
class Hero
{
private:
int atk;//攻擊力
int phylactic;//防禦力
int blood;//血量
int blueadsorbed;//法力值
int energy;//能量
public:
int getatk()
{
return atk;
}
int getphylactic()
{
return phylactic;
}
int getblood()
{
return blood;
}
int getblueadsorbed()
{
return blueadsorbed;
}
int getenergy()
{
return energy;
}
void setatk(int x)
{
atk=x;
}
void setphylactic(int x)
{
phylactic=x;
}
void setblood(int x)
{
blood=x;
}void setblueadsorbed(int x)
{
blueadsorbed=x;
}
void setenergy(int x)
{
energy=x;
}
};
英雄可以分為有法力值,和有能量值2類(因為沒有英雄可以同時擁有法力值和能量值),在英雄構建時,它們的屬性不相同,考慮到擴充套件性,可以定義一個抽象英雄類,在該抽象類中定義了一系列建立具體英雄屬性的方法。我們只定義2個英雄類,這2個英雄類繼承於這個抽象英雄類。
//抽象英雄類:
class HeroPattern
{
private:
//具體英雄
Hero * m_hero;
public:
HeroPattern()
{
m_hero = new Hero();
}
~HeroPattern()
{
if( NULL != m_hero )
{
delete m_hero;
m_hero = nullptr;
}
}
}
//這裡將設定屬性函式設為virtual型,是為了保證所有的派生類物件的設定屬性函式都會自動設定為virtual型,這保證了任何情況下,不會出現由於設定屬性函式沒有被呼叫而導致的記憶體洩漏。
virtual void setatk() = 0;
virtual void setphylactic() = 0;
virtual void setblood() = 0;
virtual void setblueadsorbed() = 0;
virtual void setenergy() = 0;
};
//有法力值的英雄
class hero1:public HeroPattern
{
void setatk()
{
m_hero->setatk(10);
}
void setphylactic()
{
m_hero->setphylacti(20);
}
void setblood()
{
m_hero->setblood(30);
}
void setblueadsorbed()
{
m_hero->setblueadsorbed(40);
}
void setenergy()
{
m_hero->setenergy(0);
}
};
//有能量值的英雄
class hero1:public HeroPattern
{
void setatk()
{
m_hero->setatk(10);
}
void setphylactic()
{
m_hero->setphylacti(20);
}
void setblood()
{
m_hero->setblood(30);
}
void setblueadsorbed()
{
m_hero->setblueadsorbed(0);
}
void setenergy()
{
m_hero->setenergy(40);
}
};
建造者模式的主要優點如下:
(1) 在建造者模式中,客戶端不必知道產品內部組成的細節,將產品本身與產品的建立過程解耦,使得相同的建立過程可以建立不同的產品物件。
(2) 每一個具體建造者都相對獨立,而與其他的具體建造者無關,因此可以很方便地替換具體建造者或增加新的具體建造者,使用者使用不同的具體建造者即可得到不同的產品物件。。
(3) 將複雜產品的建立步驟分解在不同的方法中,使得建立過程更加清晰,也更方便使用程式來控制建立過程。
建造者模式所建立的產品一般具有較多的共同點,其組成部分相似,但是同樣如果產品之間的差異性很大,例如很多組成部分都不相同,不適合使用建造者模式,因此其使用範圍受到一定的限制。
建造者模式在開發中大都用於:播放器介面的顯示(如使用者可以選擇介面顯示什麼不顯示什麼);遊戲人物的建模(如英雄人物都有一些相同的部分(身體,手,腳等等),但是每一個英雄的建造方法不同)等等
相關文章
- 建造者模式模式
- 建造者模式(Builder)模式UI
- (一)建造者模式模式
- JS 建造者模式JS模式
- 4、建造者模式模式
- Java建造者模式Java模式
- 開發者以Band of Defenders為例談遊戲的系統建造遊戲
- 設計模式-建造者模式設計模式
- 設計模式 --建造者模式設計模式
- 設計模式----建造者模式設計模式
- 設計模式 —— 建造者模式設計模式
- 設計模式(建造者模式)設計模式
- 設計模式 | 建造者模式設計模式
- 建立型模式——建造者模式模式
- 建造者模式(Builder Pattern)模式UI
- 設計模式之建造者模式設計模式
- java設計模式-建造者模式Java設計模式
- 設計模式之【建造者模式】設計模式
- 設計模式(六)——建造者模式設計模式
- 設計模式(十六):建造者模式設計模式
- 設計模式-建造者模式(Builder)設計模式UI
- 我所理解的設計模式(C++實現)——建造者模式(Builder Pattern)設計模式C++UI
- Java基礎-建造者模式Java模式
- 深入理解建造者模式 ——組裝複雜的例項模式
- 設計模式使用例項(5)——建造者模式例項之資料庫連線管理設計模式資料庫
- 設計模式實戰 - 建造者模式設計模式
- GoLang設計模式01 - 建造者模式Golang設計模式
- 設計模式--建造者模式(Builder Pattern)設計模式UI
- Java 設計模式(二)《建造者模式》Java設計模式
- golang設計模式之建造者模式Golang設計模式
- 極簡設計模式-建造者模式設計模式
- Python設計模式-建造者模式Python設計模式
- Java設計模式----建造者模式(Builder)Java設計模式UI
- JAVA設計模式之建造者模式Java設計模式
- 設計模式系列之「建造者模式」設計模式
- 設計模式學習-建造者模式設計模式
- 設計模式之-建造者模式-Builder設計模式UI
- 設計模式(Swift) - 3.觀察者模式、建造者模式設計模式Swift