程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++設計形式之簡略工場形式實例

C++設計形式之簡略工場形式實例

編輯:關於C++

C++設計形式之簡略工場形式實例。本站提示廣大學習愛好者:(C++設計形式之簡略工場形式實例)文章只能為提供參考,不一定能成為您想要的結果。以下是C++設計形式之簡略工場形式實例正文


成績描寫

之前在公司做了一個windows 8平台的浏覽器。起首,須要將電子書中的內容襯著到屏幕上,而電子書每頁都包括各類各樣的內容,好比:圖形、圖象和文字等等;分歧的內容,就是分歧的對象;在將分歧的內容襯著到屏幕上之前,就須要new操作,樹立分歧的對象,然後再在屏幕長進行描寫。這個時刻,就須要停止許多new操作,new操作散布在代碼的分歧處所,治理起來很費事,並且也很亂,到前期擴大和保護的時刻,有的時刻,對象多的閃開發人員不曉得這個對象是干甚麼的,這就增長了難度;同時,new操作,都邑有對應的異常處置,最初,就會發明,在代碼中,new了一個對象,然後,就隨著一段異常處置代碼,這時候編碼變的極端凌亂和癡肥。那末怎樣辦?怎樣辦?此時,我們須要一個新的類,專門從事對象的樹立和釋放,以後,對象的各類操作,和這個類沒有任何干系。這個專門樹立對象的類,向外暴漏創立對象的接口,供內部挪用。

工場形式有一種異常抽象的描寫,樹立對象的類就如一個工場,而須要被樹立的對象就是一個個產物;在工場中加工產物,應用產物的人,不消在意產物是若何臨盆出來的。從軟件開辟的角度來講,如許就有用的下降了模塊之間的耦合。

UML類圖

關於工場形式,詳細上可以分為三類:

1.簡略工場形式;
2.工場辦法形式;
3.籠統工場形式。

關於下面的三種工場形式,從上到下慢慢籠統,而且更具普通性。而這篇博文重要講的是簡略工場形式,後兩種會在以後的博文中接著總結。

ProductA、ProductB和ProductC繼續自Product虛擬類,Show辦法是分歧產物的自描寫;Factory依附於ProductA、ProductB和ProductC,Factory依據分歧的前提創立分歧的Product對象。

實用場所

1.在法式中,須要創立的對象許多,招致對象的new操作多且雜時,須要應用簡略工場形式;
2.因為對象的創立進程是我們不須要去關懷的,而我們重視的是對象的現實操作,所以,我們須要分別對象的創立和操作兩部門,如斯,便利前期的法式擴大和保護。

代碼完成:

/*
** FileName   : SimpleFactoryPatternDemo
** Author    : Jelly Young
** Date     : 2013/11/17
** Description : More information
*/
 
#include <iostream>
#include <vector>
using namespace std;
 
typedef enum ProductTypeTag
{
  TypeA,
  TypeB,
  TypeC
}PRODUCTTYPE;
 
// Here is the product class
class Product
{
public:
  virtual void Show() = 0;
};
 
class ProductA : public Product
{
public:
  void Show()
  {
    cout<<"I'm ProductA"<<endl;
  }
};
 
class ProductB : public Product
{
public:
  void Show()
  {
    cout<<"I'm ProductB"<<endl;
  }
};
 
class ProductC : public Product
{
public:
  void Show()
  {
    cout<<"I'm ProductC"<<endl;
  }
};
 
// Here is the Factory class
class Factory
{
public:
  Product* CreateProduct(PRODUCTTYPE type)
  {
    switch (type)
    {
    case TypeA:
      return new ProductA();
 
    case TypeB:
      return new ProductB();
 
    case TypeC:
      return new ProductC();
 
    default:
      return NULL;
    }
  }
};
 
int main(int argc, char *argv[])
{
  // First, create a factory object
  Factory *ProductFactory = new Factory();
  Product *productObjA = ProductFactory->CreateProduct(TypeA);
  if (productObjA != NULL)
    productObjA->Show();
 
  Product *productObjB = ProductFactory->CreateProduct(TypeB);
  if (productObjB != NULL)
    productObjB->Show();
 
  Product *productObjC = ProductFactory->CreateProduct(TypeC);
  if (productObjC != NULL)
    productObjC->Show();
 
  delete ProductFactory;
  ProductFactory = NULL;
 
  delete productObjA;
  productObjA = NULL;
 
  delete productObjB;
  productObjB = NULL;    
 
  delete productObjC;
  productObjC = NULL;
 
  return 0;
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved