日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

黑马C++设计模式2

發布時間:2023/12/9 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 黑马C++设计模式2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡單工廠模式

//一般來說,自己創建一個對象的方法是在自己寫的業務函數中直接new一個對象出來
//但是現實需求,我不想創建對象,我只想拿來用。(創建類的步驟比較復雜)
//好處,1、客戶端和具體實現類解耦。2、對于某些對象創建過程比較復雜情況,我們不用考慮這些了。
//壞處,1、簡單工廠模式,增加新的功能是通過源代碼實現的,不符合開閉原則。2、這個類的職責過重,這個類發生問題,會影響很多使用這個工廠模塊。
//抽象水果 class AbstractFruit{ public: virtual void ShowName() = 0; };//蘋果 class Apple:public AbstractFruit{ public:virtual void ShowName(){cout << “我是蘋果!” << endl;}};//鴨梨 class Pear:public AbstractFruit{ public:virtual void ShowName(){cout << “我是鴨梨!” << endl;} };//水果工廠 class FruitFactory{ public:static AbstractFruit* CreateFruit(string flag){if(flag == "apple"){return new Apple;}else if(flag == "pear"){return new Pear;}elsereturn NULL;} };void test1(){FruitFactory* factory = new FruitFactroy;AbstractFruit* apple = factory->CreateFruite("apple");apple->ShowName();AbstracFruit* banana = factory->CreateFruite("banana");banana->ShowName();delete factory;delete apple;delete banana;}

?

工廠方法模式

  問題,1、類的個數成倍增加,導致類越來越多,增加維護成本。

 ? ? 好處,1、符合開閉原則

  簡單工廠模式 + “開閉原則” = 工廠方法模式

?  

  優點:1,不需要記住具體類名,甚至連具體參數都不用記憶。

     2,實現了對象創建和使用的分離。

    ? ? 3,系統的可擴展性也就變得非常好,無需修改接口和原類。

  缺點:1,增加系統中類的個數,復雜度和理解度增加。

  ? ? ? ? ? ?2,增加了系統的抽象性和理解難度。

//抽象水果類
class
AbstractFruit{ public: virtual void ShowName() = 0; };//蘋果 class Apple:public AbstractFruit{ public:virtual void ShowName(){cout << “我是蘋果!” << endl;}};//鴨梨 class Pear:public AbstractFruit{ public:virtual void ShowName(){cout << “我是鴨梨!” << endl;} };
//抽象工廠類
class AbstractFruitFactory{
public:
virtual AbstractFruit* CreateFruit() = 0;
}

//蘋果工廠
class AppleFactory:public AbstractFruitFactory{
public:
virtual AbstracFruit* CreateFruit(){
return new Apple;
}
};
//鴨梨工廠
class PearFactory:public AbstractFruitFactory{
public:
virtual AbstracFruit* CreateFruit(){
return new Pear;
}
}; void test(){

AbstractFruitFactory* factory = NULL;
AbstractFruit* fruit = NULL;

//創建一個蘋果工廠
factory = new AppleFactory;
fruit = factory->CreateFruit();
fruit->ShowName();
delete factory;
delete fruit;

//創建一個鴨梨工廠
factory = new PearFactory;
fruit = factory->CreateFruit();
fruit->ShowName();
delete factory;
delete fruit; }

?

簡單工廠模式和工廠方法模式適用場景

  簡單工廠模式:

  1,工廠類負責創建的對象比較少,由于創建的對象較少,不會造成工廠方法中的業務邏輯太過復雜。

  2,客戶端只知道傳入工廠類的參數,對于如何創建對象不太關心。

  工廠方法模式

  1,客戶端不知道它所需要的對象的類。

  2,抽象工廠類通過其子類來指定創建哪個對象。

?

抽象工廠模式

  抽象工廠針對的是產品族,而不是產品等級結構。產品族:同一產地或者同一廠商,功能不同。產品等級:功能相同,產地或者廠商不同。

  

//抽象蘋果 class AbstractApple{ public:virtual void ShowName() = 0; };class ChineseApple:public AbstractApple{ public:virtual void ShowName(){cout << "中國蘋果" << endl;} };//美國蘋果 class USAApple:public AbstractApple{ public:virtual void ShowName(){cout << "美國蘋果" << endl;} };//日本蘋果 class JapaneseApple:public AbstractApple{ public:virtual void ShowName(){cout << "日本蘋果" << endl;} };//抽象香蕉 class AbstractBanana{ public:virtual void ShowName() = 0; };//中國香蕉 class ChineseBanana:public AbstractBanana{ public:virtual void ShowName(){cout << "中國香蕉" << endl;} };//美國香蕉 class USABanana:public AbstractBanana{ public:virtual void ShowName(){cout << "美國香蕉" << endl;} };//日本香蕉 class JapaneseBanana:public AbstractBanana{ public:virtual void ShowName(){cout << "日本香蕉" << endl;} };//抽象工廠 針對產品族 class AbstractFactory{ public:virtual AbstractApple* CreateApple() = 0;virtual AbstractBanana* CreateBanana() = 0;virtual AbstractPear* CreatePear() = 0; };//中國工廠 class ChineseFactory:public AbstracFactory{ public:virtual AbstractApple* CreateApple() {return new ChineseApple;}virtual AbstractBanana* CreateBanana(){return new ChineseBanana;}virtual AbstractPear* CreatePear(){return new ChinesePear;} };//美國工廠 class USAFactory:public AbstracFactory{ public:virtual AbstractApple* CreateApple() {return new USAApple;}virtual AbstractBanana* CreateBanana(){return new USABanana;}virtual AbstractPear* CreatePear(){return new USAPear;} };//日本工廠 class JapaneseFactory:public AbstracFactory{ public:virtual AbstractApple* CreateApple() {return new JapaneseApple;}virtual AbstractBanana* CreateBanana(){return new JapaneseBanana;}virtual AbstractPear* CreatePear(){return new JapanesePear;} };test(){AbstractFactory* factory = NULL;AbstractApple* apple = NULL;AbstractBanana* banana = NULL:AbstractPear* pear = NULL;//中國工廠factory = new ChineseFactory; apple = factory->CreateApple();banana = factory->CreateBanana();pear = factory->CreatePear();}

?

總結

一、簡單工廠模式

  我們在實例化對象的時候通常用的式New關鍵字,但是有了工廠,我們在聲明對象的時候就可以用工廠了,用new導致代碼不夠靈活,用工廠來實例化對象很靈活。

  優點,1,簡單工廠包含必要的判斷邏輯,簡單工廠實現了對象的創建和使用的分離。

     2,客戶端無需知道所創建的具體產品類的類名,只需要具體產品類對應的參數即可。

     3,在不修改任何客戶端代碼的情況下更換和增加新的具體產品類,在一定程度上提高了系統的靈活性。

  缺點,1,工廠類的職責過重,簡單工廠中包含邏輯判斷語句,他一旦有問題,整個系統都要出問題。

     2,在添加新類的時候,簡單工廠就要修改,違反了開閉原則。

?

二、工廠方法模式

  工廠方法式簡單工廠的進一步的延申,這樣說是因為簡單工廠違反了開閉原則,而工廠方法可以完美解決這個問題。

  優點,1,工廠方法用來創建類,同時隱藏了具體產品類被實例化的細節,用戶只需要關注工廠,不需要關注創建的細節。

     2,再增加新的運算類時不需要修改代碼,只需要增加對應的工廠即可。符合開閉原則。

  缺點,1,再增加新的類時,也必須增加新的工廠類,會帶來額外的開銷

     2,抽象層的加入使得理解難度加大。

?

三、抽象工廠

  抽象工廠模式是工廠方法的進一步延伸,由于它提供了功能更為強大的工廠類并且具備較好的可擴展性。

  有缺點:抽象工廠模式增加一個產品族很簡單,但是增加一個新的產品就會非常復雜。  

?

轉載于:https://www.cnblogs.com/Maurice-code/p/11608488.html

總結

以上是生活随笔為你收集整理的黑马C++设计模式2的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。