日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

常見設(shè)計模式--C++基礎(chǔ)

 KookNut39 2021-12-15

單件模式(SINGLETON):
意圖:保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。
動機:對于一些類來說,只有一個實例是很重要的。比如董事長是一個類,不同的公司可以有不同的董事長,但是一個公司只能有一個董事長,來對公司的各項決議做最終決定。
思考:我們怎么做才能使得這一個類只有一個實例并且實例易于被訪問?全局變量是我們思考的一種方法,但是全局變量并不能使實例唯一化。
解決辦法:讓類自身負(fù)責(zé)保存它的唯一實例。這個類可以保證沒有其他實例被創(chuàng)建,并且可以提供一個可以訪問該實例的方法。
廢話不多說,看實例代碼:

class Singleton
{
public:
static Singleton* Instance();//供外部訪問該單件的接口
protected:
Singleton() {};//構(gòu)造函數(shù),保護起來,防止被意外實例化
private:
static Singleton* __Instance;//用來保存唯一實例
};
Singleton* Singleton::__Instance = NULL;//初始化
Singleton* Singleton::Instance()
{
if (__Instance == NULL)
{
__Instance = new Singleton;
}
return __Instance;
}
void main()
{
Singleton* v1 = Singleton::Instance();
//v1 = 0x000d6a38 {...}
Singleton* v2 = Singleton::Instance();
v2 = 0x000d6a38 {...}和v1指向同一片地址
//Singleton* v3 = new Singleton;//會發(fā)出不可訪問的錯誤報告
//Singleton  v4;//會發(fā)出不可訪問的錯誤報告
system("pause");
getchar();
}

抽象工廠模式(ABSTRACT FACTORY):
意圖:提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無需指定他們具體的類。
動機:生活中我們可能會遇到同樣的東西,在具體的不同的領(lǐng)域有不同的表現(xiàn)形式。當(dāng)提供一個產(chǎn)品類庫,只是想顯示他們的接口而不是實現(xiàn)時,可以使用抽象工廠。就比如動物吃飯,動物是一個類,但是具體到某一種動物有自己的吃飯方式。
思考:我們?nèi)绾稳プ龅骄唧w不同的動物類型,去做自己的事情呢?將動物定義為一個抽象類便可以解決。
解決辦法:我們定義抽象類之后,客戶只需要和抽象類定義的接口交互,而不使用特定的具體類的接口。
代碼:

class ProductA//純虛接口A
{
public:
virtual void Show() = 0;
};

class ProductA1 : public ProductA
{
public:
void Show()
{
cout << "This is ProductA1" << endl;
}
};

class ProductA2 : public ProductA
{
public:
void Show()
{
cout << "This is ProductA2" << endl;
}
};


class ProductB//純虛接口B
{
public:
virtual void Show() = 0;
};

class ProductB1 : public ProductB
{
public:
void Show()
{
cout << "This is ProductB1" << endl;
}
};

class ProductB2 : public ProductB
{
public:
void Show()
{
cout << "This is ProductB2" << endl;
}
};

class Factory//抽象基類
{
public:
virtual ProductA *CreateProductA() = 0;
virtual ProductB *CreateProductB() = 0;
};

class Factory1 : public Factory//工廠1
{
public:
static Factory1* Instance();
ProductA *CreateProductA()
{
return new ProductA1();
}

ProductB *CreateProductB()
{
return new ProductB1();
}
protected:
Factory1() {};
private:
static Factory1* __Instance1;//保證只有一個實例
};
Factory1* Factory1::__Instance1 = NULL;
Factory1* Factory1::Instance()
{
if (__Instance1 == NULL)
{
__Instance1 = new Factory1();
}
return __Instance1;
}
class Factory2 : public Factory//工廠2
{
public:
static Factory2* Instance();
ProductA *CreateProductA()
{
return new ProductA2();
}

ProductB *CreateProductB()
{
return new ProductB2();
}
protected:
Factory2() {};
private:
static Factory2* __Instance2;//保證只有一個實例
};
Factory2* Factory2::__Instance2 = NULL;
Factory2* Factory2::Instance()
{
if (__Instance2 == NULL)
{
__Instance2 = new Factory2();
}
return __Instance2;
}

“We all get to the peak together or we don’t get there at all.”
參考資料:
《設(shè)計模式》
學(xué)習(xí)鏈接:
https://blog.csdn.net/CoderAldrich/article/details/83114687

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多