最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

舉例解析設(shè)計模式中的工廠方法模式在C++編程中的運用

 更新時間:2016年03月05日 09:47:30   作者:runfeel  
這篇文章主要介紹了設(shè)計模式中的工廠方法模式在C++編程中的運用,文中也對簡單工廠模式和工廠方法模式進(jìn)行了簡單的對比,需要的朋友可以參考下

工廠方法模式不同于簡單工廠模式的地方在于工廠方法模式把對象的創(chuàng)建過程放到里子類里。這樣工廠父對象和產(chǎn)品父對象一樣,可以是抽象類或者接口,只定義相應(yīng)的規(guī)范或操作,不涉及具體的創(chuàng)建或?qū)崿F(xiàn)細(xì)節(jié)。
其類圖如下:

20163594444679.png (883×390)

實例代碼為:

#pragma once 
class IProduct 
{ 
public: 
  IProduct(void); 
  virtual ~IProduct(void); 
}; 
 
#pragma once 
#include "iproduct.h" 
class IPad : 
  public IProduct 
{ 
public: 
  IPad(void); 
  ~IPad(void); 
}; 
 
#pragma once 
#include "iproduct.h" 
class IPhone : 
  public IProduct 
{ 
public: 
  IPhone(void); 
  ~IPhone(void); 
}; 


#pragma once 
#include"IProduct.h" 
 
class IFactory 
{ 
public: 
  IFactory(void); 
  virtual ~IFactory(void); 
 
  virtual IProduct* getProduct(); 
}; 
 
 
#pragma once 
#include "ifactory.h" 
class IPadFactory : 
  public IFactory 
{ 
public: 
  IPadFactory(void); 
  ~IPadFactory(void); 
 
  virtual IProduct* getProduct(); 
}; 
 
 
#pragma once 
#include "ifactory.h" 
class IPhoneFactory : 
  public IFactory 
{ 
public: 
  IPhoneFactory(void); 
  ~IPhoneFactory(void); 
 
  virtual IProduct* getProduct(); 
}; 

關(guān)鍵的實現(xiàn):

#include "StdAfx.h" 
#include "IPadFactory.h" 
#include"IPad.h" 
 
IPadFactory::IPadFactory(void) 
{ 
} 
 
 
IPadFactory::~IPadFactory(void) 
{ 
} 
 
IProduct* IPadFactory::getProduct() 
{ 
  return new IPad(); 
} 
 
 
#include "StdAfx.h" 
#include "IPhoneFactory.h" 
#include"IPhone.h" 
 
IPhoneFactory::IPhoneFactory(void) 
{ 
} 
 
 
IPhoneFactory::~IPhoneFactory(void) 
{ 
} 
 
 
IProduct* IPhoneFactory::getProduct() 
{ 
  return new IPhone(); 
} 

調(diào)用方式:

#include "stdafx.h" 
#include"IFactory.h" 
#include"IPadFactory.h" 
#include"IPhoneFactory.h" 
#include"IProduct.h" 
 
 
int _tmain(int argc, _TCHAR* argv[]) 
{ 
  IFactory *fac = new IPadFactory(); 
  IProduct *pro = fac->getProduct(); 
 
  fac = new IPhoneFactory(); 
  pro = fac->getProduct(); 
  return 0; 
} 


應(yīng)用場景:
1..net里面的數(shù)據(jù)庫連接對象就是產(chǎn)生數(shù)據(jù)命令對象的工廠。每種數(shù)據(jù)庫的connection對象里(繼承自IDbConnection)都有對自己createCommand(定義在IDbCommand里)的實現(xiàn)。
2..net里面的迭代器,IEnumerable定義了迭代器的接口,即工廠方法,每一個繼承自IEnumerable的類都要實現(xiàn)GetEnumerator??梢詤⒖碅rrayList,String的GetEnumerator方法。他們都繼承自IEnumerable。

對比簡單工廠模式與工廠方法模式:

1. 結(jié)構(gòu)復(fù)雜度

從這個角度比較,顯然簡單工廠模式要占優(yōu)。簡單工廠模式只需一個工廠類,而工廠方法模式的工廠類隨著產(chǎn)品類個數(shù)增加而增加,這無疑會使類的個數(shù)越來越多,從而增加了結(jié)構(gòu)的復(fù)雜程度。

2.代碼復(fù)雜度

代碼復(fù)雜度和結(jié)構(gòu)復(fù)雜度是一對矛盾,既然簡單工廠模式在結(jié)構(gòu)方面相對簡潔,那么它在代碼方面肯定是比工廠方法模式復(fù)雜的了。簡單工廠模式的工廠類隨著產(chǎn)品類的增加需要增加很多方法(或代碼),而工廠方法模式每個具體工廠類只完成單一任務(wù),代碼簡潔。

3.客戶端編程難度

工廠方法模式雖然在工廠類結(jié)構(gòu)中引入了接口從而滿足了OCP,但是在客戶端編碼中需要對工廠類進(jìn)行實例化。而簡單工廠模式的工廠類是個靜態(tài)類,在客戶端無需實例化,這無疑是個吸引人的優(yōu)點。

4.管理上的難度

這是個關(guān)鍵的問題。

我 們先談擴(kuò)展。眾所周知,工廠方法模式完全滿足OCP,即它有非常良好的擴(kuò)展性。那是否就說明了簡單工廠模式就沒有擴(kuò)展性呢?答案是否定的。簡單工廠模式同 樣具備良好的擴(kuò)展性——擴(kuò)展的時候僅需要修改少量的代碼(修改工廠類的代碼)就可以滿足擴(kuò)展性的要求了。盡管這沒有完全滿足OCP,但筆者認(rèn)為不需要太拘 泥于設(shè)計理論。

然后我們從維護(hù)性的角度分析下。假如某個具體產(chǎn)品類需要進(jìn)行一定的修改,很可能需要修改對應(yīng)的工廠類。當(dāng)同時 需要修改多個產(chǎn)品類的時候,對工廠類的修改會變得相當(dāng)麻煩(對號入座已經(jīng)是個問題了)。反而簡單工廠沒有這些麻煩,當(dāng)多個產(chǎn)品類需要修改是,簡單工廠模式 仍然僅僅需要修改唯一的工廠類(無論怎樣都能改到滿足要求吧?大不了把這個類重寫)。

由以上的分析,筆者認(rèn)為簡單工廠模式更好用更方便些。當(dāng)然這只是筆者的個人看法而已,畢竟公認(rèn)的,工廠方法模式比簡單工廠模式更“先進(jìn)”。但有時過于先進(jìn)的東西未必適合自己,這個見仁見智吧。

相關(guān)文章

  • C/C++?Qt?數(shù)據(jù)庫QSql增刪改查組件應(yīng)用教程

    C/C++?Qt?數(shù)據(jù)庫QSql增刪改查組件應(yīng)用教程

    Qt?SQL模塊是Qt中用來操作數(shù)據(jù)庫的類,該類封裝了各種SQL數(shù)據(jù)庫接口,可以很方便的鏈接并使用。本文主要介紹了Qt數(shù)據(jù)庫QSql增刪改查組件的應(yīng)用教程,感興趣的同學(xué)可以學(xué)習(xí)一下
    2021-12-12
  • C++的原生數(shù)組你了解多少

    C++的原生數(shù)組你了解多少

    這篇文章主要為大家詳細(xì)介紹了C++的原生數(shù)組,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C/C++常用函數(shù)易錯點分析

    C/C++常用函數(shù)易錯點分析

    這篇文章主要介紹了C/C++常用函數(shù)易錯點分析,包含了memset、sizeof、getchar三個常用函數(shù)的分析,需要的朋友可以參考下
    2014-08-08
  • tcp socket客戶端和服務(wù)端示例分享

    tcp socket客戶端和服務(wù)端示例分享

    這篇文章主要介紹了tcp socket客戶端和服務(wù)端示例,需要的朋友可以參考下
    2014-03-03
  • 一文帶你學(xué)會C語言中的qsort函數(shù)

    一文帶你學(xué)會C語言中的qsort函數(shù)

    qsort函數(shù)是C語言的庫函數(shù),能實現(xiàn)對各種元素類型的比較,使用的基本思想是快速排序法,頭文件是<stdlib.h>,本文不講解具體實現(xiàn)原理,只對使用方法進(jìn)行說明,希望對大家有所幫助
    2022-12-12
  • C++ Boost Array與Unordered使用介紹

    C++ Boost Array與Unordered使用介紹

    Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱
    2022-11-11
  • 學(xué)生成績管理系統(tǒng)C++實現(xiàn)代碼

    學(xué)生成績管理系統(tǒng)C++實現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了學(xué)生成績管理系統(tǒng)C++實現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • 必須知道的C語言八大排序算法(收藏)

    必須知道的C語言八大排序算法(收藏)

    這篇文章主要介紹了C語言八大排序算法的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-10-10
  • qt獲取當(dāng)前時間(QDateTime、QTime、QDate)

    qt獲取當(dāng)前時間(QDateTime、QTime、QDate)

    本文主要介紹了qt獲取當(dāng)前時間(QDateTime、QTime、QDate),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 一篇文章帶你掌握C++虛函數(shù)的來龍去脈

    一篇文章帶你掌握C++虛函數(shù)的來龍去脈

    虛函數(shù)主要通過V-Table虛函數(shù)表來實現(xiàn),該表主要包含一個類的虛函數(shù)的地址表,可解決繼承、覆蓋的問題,下面這篇文章主要給大家介紹了如何通過一篇文章帶你掌握C++虛函數(shù)的來龍去脈,需要的朋友可以參考下
    2022-10-10

最新評論

勐海县| 阿巴嘎旗| 泾阳县| 库伦旗| 武汉市| 临沧市| 郯城县| 苍梧县| 城市| 铜山县| 芦溪县| 商水县| 万盛区| 确山县| 海门市| 黑河市| 嘉荫县| 南汇区| 阿拉善盟| 青海省| 青神县| 汾西县| 锡林浩特市| 长宁县| 青浦区| 敦煌市| 昌都县| 霍邱县| 都兰县| 清新县| 定远县| 左云县| 普兰县| 台山市| 龙江县| 镇沅| 且末县| 安徽省| 汉中市| 政和县| 正安县|