2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩16頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  工廠模式和單件模式</b></p><p><b>  Factory模式</b></p><p><b>  應(yīng)用背景</b></p><p>  我們經(jīng)常抽象出一些類的公共接口以形成抽象基類或者接口,這樣就可以通過聲明一個(gè)指向基類的指針來指向?qū)嶋H的子類實(shí)現(xiàn),達(dá)到了多態(tài)

2、的目的。</p><p><b>  存在問題</b></p><p>  N多的子類繼承抽象基類,不得不在每次要用到子類的地方就編寫諸如new XXX的代碼,此外必須知道實(shí)際子類的名字,在復(fù)雜系統(tǒng)中簡直不可能,維護(hù)和擴(kuò)展也很困難。</p><p>  另外,在父類中并不知道具體要實(shí)例化哪一個(gè)具體的子類。</p><p>

3、;<b>  程序舉例</b></p><p>  #ifndef _PRODUCT_H</p><p>  #define _PRODUCT_H</p><p>  /************************************************************************/</p><

4、;p>  /* Product */</p><p>  /************************************************************************/</p><p>  class Product</

5、p><p><b>  {</b></p><p><b>  public:</b></p><p>  Product();</p><p>  virtual ~Product();</p><p>  virtual void operation();</p>

6、<p><b>  };</b></p><p>  /************************************************************************/</p><p>  /* Concrete Product A

7、 */</p><p>  /************************************************************************/</p><p>  class ConcreteProductA : public Product</p><p><b>  {</b></p>

8、<p><b>  public:</b></p><p>  ConcreteProductA();</p><p>  virtual ~ConcreteProductA();</p><p>  virtual void operation();</p><p><b>  };</b

9、></p><p>  /************************************************************************/</p><p>  /* Concrete Product B */</p><p> 

10、 /************************************************************************/</p><p>  class ConcreteProductB : public Product</p><p><b>  {</b></p><p><b>  public:&

11、lt;/b></p><p>  ConcreteProductB();</p><p>  virtual ~ConcreteProductB();</p><p>  virtual void operation();</p><p><b>  };</b></p><p>  /**

12、**********************************************************************/</p><p>  /* Concrete Product C */</p><p>  /****************************

13、********************************************/</p><p>  class ConcreteProductC : public Product</p><p><b>  {</b></p><p><b>  public:</b></p><p>

14、  ConcreteProductC();</p><p>  virtual ~ConcreteProductC();</p><p>  virtual void operation();</p><p><b>  };</b></p><p><b>  #endif</b></p&g

15、t;<p>  #include "product.h"</p><p>  #include "stdio.h"</p><p>  /************************************************************************/</p><p>  /* P

16、roduct */</p><p>  /************************************************************************/</p><p>  Product::Product()</p>

17、<p><b>  {</b></p><p><b>  }</b></p><p>  Product::~Product()</p><p><b>  {</b></p><p><b>  }</b></p><p&

18、gt;  void Product::operation()</p><p><b>  {</b></p><p>  printf("Product operation...\n");</p><p><b>  }</b></p><p>  /**************

19、**********************************************************/</p><p>  /* Concrete Product A */</p><p>  /****************************************

20、********************************/</p><p>  ConcreteProductA::ConcreteProductA()</p><p><b>  {</b></p><p><b>  }</b></p><p>  ConcreteProductA::~

21、ConcreteProductA()</p><p><b>  {</b></p><p><b>  }</b></p><p>  void ConcreteProductA::operation()</p><p><b>  {</b></p><

22、p>  printf("ConcreteProductA operation...\n");</p><p><b>  }</b></p><p>  /************************************************************************/</p><p>

23、  /* Concrete Product B */</p><p>  /************************************************************************/</p><p>  ConcreteProductB::Concre

24、teProductB()</p><p><b>  {</b></p><p><b>  }</b></p><p>  ConcreteProductB::~ConcreteProductB()</p><p><b>  {</b></p><p&g

25、t;<b>  }</b></p><p>  void ConcreteProductB::operation()</p><p><b>  {</b></p><p>  printf("ConcreteProductB operation...\n");</p><p>

26、<b>  }</b></p><p>  /************************************************************************/</p><p>  /* Concrete Product C */<

27、/p><p>  /************************************************************************/</p><p>  ConcreteProductC::ConcreteProductC()</p><p><b>  {</b></p><p><

28、b>  }</b></p><p>  ConcreteProductC::~ConcreteProductC()</p><p><b>  {</b></p><p><b>  }</b></p><p>  void ConcreteProductC::operation(

29、)</p><p><b>  {</b></p><p>  printf("ConcreteProductC operation...\n");</p><p><b>  }</b></p><p>  #include "product.h"</

30、p><p>  #include "stdio.h"</p><p>  void main()</p><p><b>  {</b></p><p>  Product *pProduct = NULL;</p><p>  pProduct = new ConcretePro

31、ductA();</p><p>  pProduct->operation();</p><p>  pProduct = new ConcreteProductB();</p><p>  pProduct->operation();</p><p>  pProduct = new ConcreteProductC();&l

32、t;/p><p>  pProduct->operation();</p><p>  printf("\n");</p><p><b>  }</b></p><p><b>  程序結(jié)果:</b></p><p><b>  工廠模式&l

33、t;/b></p><p>  Factory模式結(jié)構(gòu)示意圖</p><p>  1、封裝產(chǎn)品的創(chuàng)建過程:用工廠來創(chuàng)建產(chǎn)品</p><p>  2、將創(chuàng)建過程放到子類中:用具體工廠來創(chuàng)建產(chǎn)品</p><p>  #ifndef _PRODUCT_H</p><p>  #define _PRODUCT_H<

34、/p><p>  /************************************************************************/</p><p>  /* Product */</p><p>  /******

35、******************************************************************/</p><p>  class Product</p><p><b>  {</b></p><p><b>  public:</b></p><p>  Pr

36、oduct();</p><p>  virtual ~Product();</p><p>  virtual void operation();</p><p><b>  };</b></p><p>  /******************************************************

37、******************/</p><p>  /* Concrete Product A */</p><p>  /************************************************************************/</p&

38、gt;<p>  class ConcreteProductA : public Product</p><p><b>  {</b></p><p><b>  public:</b></p><p>  ConcreteProductA();</p><p>  virtual

39、~ConcreteProductA();</p><p>  virtual void operation();</p><p><b>  };</b></p><p>  /************************************************************************/</p>

40、<p>  /* Concrete Product B */</p><p>  /************************************************************************/</p><p>  class Concrete

41、ProductB : public Product</p><p><b>  {</b></p><p><b>  public:</b></p><p>  ConcreteProductB();</p><p>  virtual ~ConcreteProductB();</p>

42、<p>  virtual void operation();</p><p><b>  };</b></p><p>  /************************************************************************/</p><p>  /* Concrete Produc

43、t C */</p><p>  /************************************************************************/</p><p>  class ConcreteProductC : public Product</

44、p><p><b>  {</b></p><p><b>  public:</b></p><p>  ConcreteProductC();</p><p>  virtual ~ConcreteProductC();</p><p>  virtual void oper

45、ation();</p><p><b>  };</b></p><p><b>  #endif</b></p><p>  #include "product.h"</p><p>  #include "stdio.h"</p><

46、p>  /************************************************************************/</p><p>  /* Product */</p><p>  /******************

47、******************************************************/</p><p>  Product::Product()</p><p><b>  {</b></p><p><b>  }</b></p><p>  Product::~Produ

48、ct()</p><p><b>  {</b></p><p><b>  }</b></p><p>  void Product::operation()</p><p><b>  {</b></p><p>  printf("Pro

49、duct operation...\n");</p><p><b>  }</b></p><p>  /************************************************************************/</p><p>  /* Concrete Product A

50、 */</p><p>  /************************************************************************/</p><p>  ConcreteProductA::ConcreteProductA()</p><p>

51、;<b>  {</b></p><p><b>  }</b></p><p>  ConcreteProductA::~ConcreteProductA()</p><p><b>  {</b></p><p><b>  }</b></p&g

52、t;<p>  void ConcreteProductA::operation()</p><p><b>  {</b></p><p>  printf("ConcreteProductA operation...\n");</p><p><b>  }</b></p>

53、<p>  /************************************************************************/</p><p>  /* Concrete Product B */</p><p>  /************

54、************************************************************/</p><p>  ConcreteProductB::ConcreteProductB()</p><p><b>  {</b></p><p><b>  }</b></p>&l

55、t;p>  ConcreteProductB::~ConcreteProductB()</p><p><b>  {</b></p><p><b>  }</b></p><p>  void ConcreteProductB::operation()</p><p><b> 

56、 {</b></p><p>  printf("ConcreteProductB operation...\n");</p><p><b>  }</b></p><p>  /******************************************************************

57、******/</p><p>  /* Concrete Product C */</p><p>  /************************************************************************/</p><p&g

58、t;  ConcreteProductC::ConcreteProductC()</p><p><b>  {</b></p><p><b>  }</b></p><p>  ConcreteProductC::~ConcreteProductC()</p><p><b>  {&

59、lt;/b></p><p><b>  }</b></p><p>  void ConcreteProductC::operation()</p><p><b>  {</b></p><p>  printf("ConcreteProductC operation...\n&

60、quot;);</p><p><b>  }</b></p><p>  #ifndef _FACTORY_H</p><p>  #define _FACTORY_H</p><p>  class Product;</p><p>  /***************************

61、*********************************************/</p><p>  /* Product抽象基類有很多個(gè)子類,創(chuàng)建這些子類時(shí)我們很難知道子類的名字, */</p><p>  /* 因此用工廠類將這些具體產(chǎn)品子類的創(chuàng)建封裝起來。但如果工廠類也是基類 */</p><p>  /* 那么它就不知道要封裝哪個(gè)產(chǎn)品的創(chuàng)建

62、過程了。因此創(chuàng)建具體產(chǎn)品的過程要下 */</p><p>  /* 放到工廠類的子類中。 */</p><p>  /************************************************************************/</p><

63、p>  class Factory</p><p><b>  {</b></p><p><b>  public:</b></p><p>  virtual ~Factory() = 0; /* 基類析構(gòu)函數(shù)必須為虛函數(shù) */</p><p>  virtual Product *Cre

64、ateProduct() = 0; /* 純虛函數(shù)只作為接口,不能有實(shí)例 */</p><p>  protected:</p><p>  Factory();</p><p><b>  };</b></p><p>  /***********************************************

65、*************************/</p><p>  /* ConcreteFactoryA */</p><p>  /************************************************************************/

66、</p><p>  class ConcreteFactoryA : public Factory</p><p><b>  {</b></p><p><b>  public:</b></p><p>  ConcreteFactoryA();</p><p>  ~

67、ConcreteFactoryA();</p><p>  Product *CreateProduct();</p><p><b>  };</b></p><p>  /************************************************************************/</p>

68、<p>  /* ConcreteFactoryB */</p><p>  /************************************************************************/</p><p>  class ConcreteF

69、actoryB : public Factory</p><p><b>  {</b></p><p><b>  public:</b></p><p>  ConcreteFactoryB();</p><p>  ~ConcreteFactoryB();</p><p&g

70、t;  Product *CreateProduct();</p><p><b>  };</b></p><p>  /************************************************************************/</p><p>  /* ConcreteFactoryC

71、 */</p><p>  /************************************************************************/</p><p>  class ConcreteFactoryC : public Factory</p>&l

72、t;p><b>  {</b></p><p><b>  public:</b></p><p>  ConcreteFactoryC();</p><p>  ~ConcreteFactoryC();</p><p>  Product *CreateProduct();</p>

73、;<p><b>  };</b></p><p><b>  #endif</b></p><p>  #include "factory.h"</p><p>  #include "product.h"</p><p>  #include

74、 "stdio.h"</p><p>  Factory::Factory()</p><p><b>  {</b></p><p><b>  }</b></p><p>  Factory::~Factory()</p><p><b> 

75、 {</b></p><p><b>  }</b></p><p>  /************************************************************************/</p><p>  /* ConcreteFactoryA

76、 */</p><p>  /************************************************************************/</p><p>  ConcreteFactoryA::ConcreteFactoryA()</p><p><b>  {&l

77、t;/b></p><p>  printf("ConcreteFactoryA...\n");</p><p><b>  }</b></p><p>  ConcreteFactoryA::~ConcreteFactoryA()</p><p><b>  {</b>&

78、lt;/p><p><b>  }</b></p><p>  Product *ConcreteFactoryA::CreateProduct()</p><p><b>  {</b></p><p>  return new ConcreteProductA();</p><p

79、><b>  }</b></p><p>  /************************************************************************/</p><p>  /* ConcreteFactoryB */

80、</p><p>  /************************************************************************/</p><p>  ConcreteFactoryB::ConcreteFactoryB()</p><p><b>  {</b></p><p>

81、  printf("ConcreteFactoryB...\n");</p><p><b>  }</b></p><p>  ConcreteFactoryB::~ConcreteFactoryB()</p><p><b>  {</b></p><p><b>

82、  }</b></p><p>  Product *ConcreteFactoryB::CreateProduct()</p><p><b>  {</b></p><p>  return new ConcreteProductB();</p><p><b>  }</b><

83、;/p><p>  /************************************************************************/</p><p>  /* ConcreteFactoryC */</p><p>  /*****

84、*******************************************************************/</p><p>  ConcreteFactoryC::ConcreteFactoryC()</p><p><b>  {</b></p><p>  printf("ConcreteFactor

85、yC...\n");</p><p><b>  }</b></p><p>  ConcreteFactoryC::~ConcreteFactoryC()</p><p><b>  {</b></p><p><b>  }</b></p><

86、p>  Product *ConcreteFactoryC::CreateProduct()</p><p><b>  {</b></p><p>  return new ConcreteProductC();</p><p><b>  }</b></p><p>  #include

87、"product.h"</p><p>  #include "factory.h"</p><p>  #include "stdio.h"</p><p>  void main()</p><p><b>  {</b></p><p&

88、gt;  Factory *pFac = NULL;</p><p>  Product *pPro = NULL;</p><p>  pFac = new ConcreteFactoryA();</p><p>  pPro = pFac->CreateProduct();</p><p>  pPro->operation(

89、);</p><p>  pFac = new ConcreteFactoryB();</p><p>  pPro = pFac->CreateProduct();</p><p>  pPro->operation();</p><p>  pFac = new ConcreteFactoryC();</p>&

90、lt;p>  pPro = pFac->CreateProduct();</p><p>  pPro->operation();</p><p>  printf("\n");</p><p><b>  }</b></p><p>  Singleton模式</p>

91、<p><b>  應(yīng)用背景</b></p><p>  需要?jiǎng)?chuàng)建一個(gè)唯一的變量(對(duì)象)</p><p>  Singleton模式</p><p>  Singleton結(jié)構(gòu)示意圖</p><p>  通過維護(hù)一個(gè)static的成員變量來記錄這個(gè)唯一的對(duì)象實(shí)例。</p><p>  

92、通過提供一個(gè)static的接口instance來獲得這個(gè)唯一的實(shí)例。</p><p>  #ifndef _SINGLETON_H_</p><p>  #define _SINGLETON_H_</p><p>  class Singleton</p><p><b>  {</b></p><p

93、><b>  public:</b></p><p>  static Singleton* Instance();</p><p>  protected:</p><p>  Singleton();</p><p><b>  private:</b></p><p&

94、gt;  static Singleton* _instance;</p><p><b>  };</b></p><p><b>  #endif</b></p><p>  #include "singleton.h"</p><p>  #include "st

95、dio.h"</p><p>  Singleton* Singleton::_instance = 0;</p><p>  Singleton::Singleton()</p><p><b>  {</b></p><p>  printf("Singleton...\n");<

96、/p><p><b>  }</b></p><p>  Singleton *Singleton::Instance()</p><p><b>  {</b></p><p>  if (_instance == 0)</p><p><b>  {</b&g

97、t;</p><p>  _instance = new Singleton();</p><p><b>  }</b></p><p>  return _instance;</p><p><b>  }</b></p><p>  #include "sin

98、gleton.h"</p><p>  #include "stdio.h"</p><p>  void main()</p><p><b>  {</b></p><p>  Singleton *pSgt = Singleton::Instance();</p><

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論