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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式之十一:抽象工厂模式(Abstract Factory)

發布時間:2025/3/17 asp.net 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式之十一:抽象工厂模式(Abstract Factory) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

抽象工廠模式:
提供了一個創建一系列相關的或相互依賴的對象的接口而不須要詳細指定它們的類型。

Provide an interface for creating families of related or dependent objects without specifying their concrete classes.

UML類圖:

主要包含:

  • AbstractFactory(ContinentFactory):抽象的工廠類。為詳細的工廠類聲明了一系列的接口。
  • ConcreteFactory(AfricaFactory,AmericaFactory):詳細的工廠類。實現了創建詳細對象的接口。
  • AbstractProduct(Herbivore,Carnivore):抽象的產品類。

  • Product(Wildebeest,Lion,Bison,Wolf):詳細的產品類
  • Client(AnimalWorld):使用抽象的工廠和抽象的產品類來創建對象。

  • 主要的抽象工廠模式C++代碼例如以下:

    #include <iostream> #include <stdlib.h> #include <stdio.h>class AbstractProductA {public:virtual void show()=0; };class ProductA1:public AbstractProductA {public:void show(){std::cout<<"ProductA1::show()"<<std::endl;}};class ProductA2:public AbstractProductA {public:void show(){std::cout<<"ProductA2::show()"<<std::endl;} };class AbstractProductB {public :virtual void display()=0; };class ProductB1:public AbstractProductB {public:void display(){std::cout<<"ProductB1::display()"<<std::endl;} };class ProductB2:public AbstractProductB {public:void display(){std::cout<<"ProductB2::display()"<<std::endl;} };class AbstractFactory {public:virtual AbstractProductA* createProductA()=0;virtual AbstractProductB* createProductB()=0;};class ConcreteFactory1:public AbstractFactory {public:AbstractProductA *createProductA(){return new ProductA1();}AbstractProductB *createProductB(){return new ProductB1();} };class ConcreteFactory2:public AbstractFactory {public:AbstractProductA *createProductA(){return new ProductA2();}AbstractProductB *createProductB(){return new ProductB2();} };class Client {public:Client(){}Client(AbstractFactory *af){abstractFactory=af;}AbstractProductA * getProductA(){return abstractProductA;}AbstractProductB* getProductB(){return abstractProductB;}void run(){abstractProductA=abstractFactory->createProductA();abstractProductB=abstractFactory->createProductB(); }~Client(){if(!abstractProductA)delete abstractProductA;if(!abstractProductB)delete abstractProductB;}private:AbstractFactory *abstractFactory;AbstractProductA * abstractProductA;AbstractProductB * abstractProductB; };int main() {std::cout<<"抽象工廠模式測試"<<std::endl;AbstractFactory *af=new ConcreteFactory1();Client* client=new Client(af);client->run();client->getProductA()->show();client->getProductB()->display();delete af;delete client;return 0; }

    運行結果:

    再看一個詳細的樣例:

  • AbstractFactor為ContinentFactory,即大陸工廠。

  • ConcreteFactory為AfricaFactory(非洲大陸),AmericaFacoty(美洲大陸)
  • AbstractProduct包含Herbivore(食草動物)。Carnivore(食肉動物)。
  • Product包含Wildebeest(羚羊),Lison(獅子)。Bison(美洲野牛),Wolf(美洲狐貍)。
  • Client為AnimalWorld。
  • 大陸上有食肉動物和食草動物,可是不同的大陸比方說非洲大陸的食肉動物和食草動物和美洲大陸的食肉動物和食草動物是不同的。抽象工廠工廠模式和工廠方法模式的不同點就在于抽象工廠模式有兩處變化的地方,除了工廠類能夠變化外,抽象的產品類有多個而不是一個。

    UML圖例如以下:

    C++代碼實現例如以下:

    #include <stdlib.h> #include <stdio.h> #include <iostream>//食草動物 class Herbivore {public:virtual void drink()=0; };//羚羊的一種。產于非洲 class Wildebeest:public Herbivore {public:void drink(){std::cout<<"wildbeest drink"<<std::endl;} };//美洲野牛 class Bison:public Herbivore {public:void drink(){std::cout<<"bison drink"<<std::endl;} };//食肉動物 class Carnivore {public:virtual void eat()=0; };//非洲獅子 class Lion:public Carnivore {public:void eat(){std::cout<<"lion eat"<<std::endl;} };//狼 class Wolf:public Carnivore {public:void eat(){std::cout<<"wolf eat"<<std::endl;} };//大陸工廠 class ContinentFactory {public:virtual Herbivore * createHerbivore()=0;virtual Carnivore * createCarnivore()=0;};class AfricaFactory :public ContinentFactory {public:virtual Herbivore * createHerbivore(){return new Wildebeest();}virtual Carnivore * createCarnivore(){return new Lion();}};class AmericaFactory :public ContinentFactory {public:virtual Herbivore * createHerbivore(){return new Bison();}virtual Carnivore * createCarnivore(){return new Wolf();}};class AnimalWorld {public:AnimalWorld(){}AnimalWorld(ContinentFactory *cf){herbivore=cf->createHerbivore();carnivore=cf->createCarnivore();}void action(){herbivore->drink();carnivore->eat();}~AnimalWorld(){if(!herbivore)delete herbivore;if(!carnivore)delete carnivore;}private:Herbivore * herbivore;Carnivore * carnivore;};int main() {std::cout<<"抽象工廠模式詳細的樣例"<<std::endl;ContinentFactory * cf=new AmericaFactory;AnimalWorld *an=new AnimalWorld(cf);an->action();delete cf;delete an;return 0; }

    運行結果:

    總結

    以上是生活随笔為你收集整理的设计模式之十一:抽象工厂模式(Abstract Factory)的全部內容,希望文章能夠幫你解決所遇到的問題。

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