国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當前位置: 首頁 > news >正文

彩票代購網(wǎng)站建設電腦優(yōu)化軟件哪個好用

彩票代購網(wǎng)站建設,電腦優(yōu)化軟件哪個好用,ubuntu 12.04安裝wordpress,網(wǎng)站開發(fā)網(wǎng)站制作報價單作者:翟天保Steven 版權聲明:著作權歸作者所有,商業(yè)轉載請聯(lián)系作者獲得授權,非商業(yè)轉載請注明出處 一、抽象工廠模式是什么? 抽象工廠模式是一種創(chuàng)建型的軟件設計模式,該模式相當于升級版的工廠模式。 如果…

作者:翟天保Steven
版權聲明:著作權歸作者所有,商業(yè)轉載請聯(lián)系作者獲得授權,非商業(yè)轉載請注明出處

一、抽象工廠模式是什么?

? ? ? ?抽象工廠模式是一種創(chuàng)建型的軟件設計模式,該模式相當于升級版的工廠模式。

? ? ? ?如果說工廠模式對應一個產(chǎn)品系列,那抽象工廠就對應了多個產(chǎn)品系列。比如工廠模式中有鞋子、衣服和褲子可以生產(chǎn),那抽象工廠模式就會衍生出耐克工廠和阿迪工廠,這兩個工廠分別生產(chǎn)各自品牌的鞋子、衣服和褲子,客戶只需要選擇具體工廠和想要的產(chǎn)品即可。如果想要替換產(chǎn)品系列,也只需要將具體工廠切換為別的品牌就行了。

? ? ? ?抽象工廠模式的優(yōu)點:

  1. 具體類分離。具體產(chǎn)品類在具體工廠的實現(xiàn)中進行了分離和歸類。
  2. 易于更換產(chǎn)品族。當客戶想要改變整個產(chǎn)品族時,只需要切換具體工廠即可。
  3. 利于產(chǎn)品一致性。當產(chǎn)品族的各個產(chǎn)品需要在一起執(zhí)行時,抽象工廠可以確??蛻糁徊僮魍盗挟a(chǎn)品,而不會進行跨品牌的組合。

? ? ? 抽象工廠模式的缺點:

  1. 不利于添加新種類產(chǎn)品。每加一個新的種類,如多一個項鏈類型的產(chǎn)品,那每一個具體工廠都要進行代碼的擴展,且破壞了原先規(guī)定的結構,違反了開閉原則。

二、抽象工廠模式

2.1 結構圖

? ? ? ?客戶端即Main主函數(shù),選擇具體工廠(族),通過該工廠產(chǎn)生該系列下的具體產(chǎn)品(蘋果和香蕉),切換具體工廠,產(chǎn)生新系列的具體產(chǎn)品。

2.2 代碼示例

? ? ? ?場景描述:我聯(lián)系了一家中國工廠,品嘗該廠的蘋果和香蕉,吃完后又找到一家美國工廠,品嘗他家的蘋果和香蕉,對比下口感。

//Prodect.h
/****************************************************/
#pragma once
#include <iostream>using namespace std;// 抽象產(chǎn)品類
class Prodect
{
public:// 構造函數(shù)Prodect(int price) :m_price(price) {};// 析構函數(shù)virtual ~Prodect() {};// 獲取價格int getPrice() {return m_price;}
protected:// 產(chǎn)品價格int m_price;
};// 抽象產(chǎn)品細分-蘋果
class AppleProdect : public Prodect
{
public:// 構造函數(shù)AppleProdect(int price, string color) :Prodect(price), m_color(color) {};// 析構函數(shù)virtual ~AppleProdect() {};// 獲取顏色string getColor() {return m_color;}
protected:// 顏色string m_color;
};// 抽象產(chǎn)品細分-香蕉
class BananaProdect : public Prodect
{
public:// 構造函數(shù)BananaProdect(int price) :Prodect(price) {};// 析構函數(shù)virtual ~BananaProdect() {};
};// 具體產(chǎn)品-中國蘋果
class ChineseAppleProdect : public AppleProdect
{
public:// 構造函數(shù)ChineseAppleProdect(int price, string color) :AppleProdect(price, color) {cout << "獲得了一個中國蘋果。" << endl;};// 析構函數(shù)virtual ~ChineseAppleProdect() {cout << "吃掉了一個中國蘋果。" << endl;};
};// 具體產(chǎn)品-美國蘋果
class AmericanAppleProdect : public AppleProdect
{
public:// 構造函數(shù)AmericanAppleProdect(int price, string color) :AppleProdect(price, color) {cout << "獲得了一個美國蘋果。" << endl;};// 析構函數(shù)virtual ~AmericanAppleProdect() {cout << "吃掉了一個美國蘋果。" << endl;};
};// 具體產(chǎn)品-中國香蕉
class ChineseBananaProdect : public BananaProdect
{
public:// 構造函數(shù)ChineseBananaProdect(int price) :BananaProdect(price) {cout << "獲得了一個中國香蕉。" << endl;};// 析構函數(shù)virtual ~ChineseBananaProdect() {cout << "吃掉了一個中國香蕉。" << endl;};
};// 具體產(chǎn)品-美國香蕉
class AmericanBananaProdect : public BananaProdect
{
public:// 構造函數(shù)AmericanBananaProdect(int price) :BananaProdect(price) {cout << "獲得了一個美國香蕉。" << endl;};// 析構函數(shù)virtual ~AmericanBananaProdect() {cout << "吃掉了一個美國香蕉。" << endl;};
};
//Factory.h
/****************************************************/
#pragma once
#include <iostream>
#include "Prodect.h"using namespace std;// 抽象工廠類
class Factory
{
public:// 獲取蘋果virtual Prodect* getApple() = 0;// 獲取香蕉virtual Prodect* getBanana() = 0;
};// 具體工廠類-中國工廠
class ChineseFactory : public Factory
{
public:// 獲取蘋果virtual Prodect* getApple() {Prodect* prodect = new ChineseAppleProdect(5, "紅");return prodect;}// 獲取香蕉virtual Prodect* getBanana() {Prodect* prodect = new ChineseBananaProdect(3);return prodect;}
};// 具體工廠類-美國工廠
class AmericanFactory : public Factory
{
public:// 獲取產(chǎn)品virtual Prodect* getApple() {Prodect* prodect = new AmericanAppleProdect(4, "黑");return prodect;}// 獲取香蕉virtual Prodect* getBanana() {Prodect* prodect = new AmericanBananaProdect(2);return prodect;}
};
//main.cpp
/****************************************************/
#include <iostream>
#include <string>
#include "Factory.h"
#include "Prodect.h"using namespace std;int main()
{cout << "找到中國工廠。" << endl;Factory* factoryA = new ChineseFactory();Prodect *A = factoryA->getApple();Prodect *B = factoryA->getBanana();int applePrice = A->getPrice();int bananaPrice = B->getPrice();int sum = A->getPrice() + B->getPrice();cout << "蘋果價格:" << applePrice << "元。" << endl;cout << "香蕉價格:" << bananaPrice << "元。" << endl;cout << "累計消費:" << sum << "元。" << endl;cout << "中國蘋果" << dynamic_cast<AppleProdect*>(A)->getColor() << "色" << endl;delete A;delete B;delete factoryA;cout << "享用完畢。" << endl << endl;cout << "找到美國工廠。" << endl;Factory* factoryB = new AmericanFactory();Prodect *C = factoryB->getApple();Prodect *D = factoryB->getBanana();applePrice = C->getPrice();bananaPrice = D->getPrice();sum = C->getPrice() + D->getPrice();cout << "蘋果價格:" << applePrice << "元。" << endl;cout << "香蕉價格:" << bananaPrice << "元。" << endl;cout << "累計消費:" << sum << "元。" << endl;cout << "美國蘋果" << dynamic_cast<AppleProdect*>(C)->getColor() << "色" << endl;delete C;delete D;delete factoryB;cout << "享用完畢。不如China。" << endl;return 0;
}

? ? ? ?程序結果如下。

? ? ? ? 在上述示例中,我們可以看到,這兩個工廠都有同樣的系列產(chǎn)品(蘋果和香蕉),我想體驗新的系列產(chǎn)品,只需要更換具體工廠即可。

三、總結

? ? ? ?我盡可能用較通俗的話語和直觀的代碼例程,來表述我對抽象工廠模式的理解,或許有考慮不周到的地方,如果你有不同看法歡迎評論區(qū)交流!希望我舉的例子能幫助你更好地理解抽象工廠模式。

? ? ? ?如果文章幫助到你了,可以點個贊讓我知道,我會很快樂~加油!

http://m.aloenet.com.cn/news/38628.html

相關文章:

  • 以個人名義可以做網(wǎng)站嗎蘋果自研搜索引擎或為替代谷歌
  • 如果想看網(wǎng)站的收費電影應該怎么做惠州關鍵詞排名提升
  • 怎么把自己做的網(wǎng)站掛到外網(wǎng)上sem代運營
  • 2018年做返利網(wǎng)站網(wǎng)站功能優(yōu)化
  • 仿牌外貿(mào)網(wǎng)站百度搜索高級搜索
  • 做網(wǎng)站是干嘛廈門人才網(wǎng)最新招聘信息
  • 福州市住房和城鄉(xiāng)建設部網(wǎng)站seo是什么意思怎么解決
  • 建立英文網(wǎng)站搜索引擎優(yōu)化到底是優(yōu)化什么
  • 網(wǎng)站建設技術人員要會什么企業(yè)查詢官網(wǎng)入口
  • 疫情最新資訊seo費用
  • 什么是php動態(tài)網(wǎng)站開發(fā)知名的網(wǎng)絡推廣
  • 金藏源電商網(wǎng)站建設怎樣免費制作網(wǎng)頁
  • 時尚網(wǎng)站哪里有整站優(yōu)化
  • 上海企業(yè)網(wǎng)站建設公谷歌paypal官網(wǎng)注冊入口
  • 可以做商城網(wǎng)站的公司嗎中國國家培訓網(wǎng)官網(wǎng)入口
  • 網(wǎng)站背景css培訓心得簡短
  • 科技網(wǎng)站設計公司西安網(wǎng)站建設哪家好
  • 福建省建設執(zhí)業(yè)繼續(xù)教育網(wǎng)站百度關鍵詞點擊器
  • 做網(wǎng)站收藏的網(wǎng)頁搜索熱門關鍵詞
  • 做棋牌網(wǎng)站賺錢嗎域名查詢網(wǎng)入口
  • wordpress 外貿(mào)站主題seo管理是什么
  • 國家工業(yè)和信息化部網(wǎng)站備案系統(tǒng)中國十大電商培訓機構
  • 北京網(wǎng)站建設 一流seo外包服務
  • 宿松網(wǎng)站建設青島關鍵詞排名哪家好
  • 北京上海網(wǎng)站建設無經(jīng)驗能做sem專員
  • dremrever怎么做網(wǎng)站網(wǎng)店如何做推廣
  • 網(wǎng)站怎么做構成網(wǎng)址查詢工具
  • 網(wǎng)站建設教程多少錢sem和seo有什么區(qū)別
  • 單頁面網(wǎng)站好優(yōu)化嗎成人職業(yè)技能培訓有哪些項目
  • 動漫制作專業(yè)簡介桂林網(wǎng)站優(yōu)化