程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 大話設計模式C++實現-第15章-抽象工廠模式

大話設計模式C++實現-第15章-抽象工廠模式

編輯:C++入門知識

大話設計模式C++實現-第15章-抽象工廠模式


一、UML圖

\

二、包含的角色

(1)抽象工廠

(2)具體工廠:包括具體工廠1和具體工廠2。具體工廠1用於生產具體產品A1和具體產品B1,具體工廠2用於生產具體產品A2和具體產品B2;

(3)抽象產品:包括抽象產品A和抽象產品B;

(4)具體產品:包括抽象產品A所對應的具體產品A1和A2,以及抽象產品B所對應的具體產品B1和B2.

說明:在《大話設計模式》中,上述的1和2分別代表Sqlserver數據庫和Access數據庫。上述的A和B分別代表數據庫中的User表和Department表。

三、優勢

(1)抽象工廠模式是對工廠方法模式的改進。用於處理產品不只有一類的情況(工廠方法模式下,產品只有User這一類,而抽象工廠模式下,產品包括User和Department兩類)。

(2)在以下情況下應當考慮使用抽象工廠模式:

一個系統不應當依賴於產品類實例如何被創建、組合和表達的細節,這對於所有形態的工廠模式都是重要的。這個系統有多於一個的產品族,而系統只消費其中某一產品族。同屬於同一個產品族的產品是在一起使用的,這一約束必須在系統的設計中體現出來。系統提供一個產品類的庫,所有的產品以同樣的接口出現,從而使客戶端不依賴於實現。

(3)解讀:在上例中,產品族包括兩個:1和2,也就是Sqlserver數據庫和Access數據庫。每個產品族裡面又包含兩類產品:A和B,也就是User表和Department表。而每個產品族中的產品要一起使用,就是說產品族1中的兩類產品A和B要一起使用,也就是說在SqlServer數據庫中SqlServerUser表和SqlServerDepartment表要一起使用,Access數據庫同理。

四、C++實現

#include 
#include 

using namespace std;


//數據庫表項:User
class User
{
private:
	int id;
	string name;
public:
	int getID()
	{
		return id;
	}
	string getName()
	{
		return name;
	}
	void setID(int ID)
	{
		this->id=ID;
	}
	void setName(string NAME)
	{
		this->name=NAME;
	}
};


//數據庫表項:Department
class Department
{
private:
	int id;
	string name;
public:
	int getID()
	{
		return id;
	}
	string getName()
	{
		return name;
	}
	void setID(int ID)
	{
		this->id=ID;
	}
	void setName(string NAME)
	{
		this->name=NAME;
	}
};



//抽象產品A:IUser
class IUser
{
public:
	virtual void Insert(User user)=0;
	virtual User* GetUser(int id)=0;
};
//具體產品A1:SqlserverUser
class SqlserverUser:public IUser
{
public:
	void Insert(User user)
	{
		cout<<"在SQL Server中給User表增加了一條記錄"<CreateUser();
	iu->Insert(user);
	iu->GetUser(1);

	IDepartment* id=factory->CreateDepartment();
	id->Insert(department);
	id->GetDepartment(1);

	system("pause");
}


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved