抽象工廠(Abstract Factory)模式

 抽象工廠(Abstract Factory)模式

 

//Factory.h
#ifndef DEF_FACTORY_H_
#define DEF_FACTORY_H_
/////////////////////////////////////////////////////////////////////////
/*


抽象工廠(Abstract Factory)角色:擔任這個角色的是工廠方法模式的核心,它是與應用系統商業邏輯無關的。

具體工廠(Concrete Factory)角色:這個角色直接在客戶端的調用下創建產品的實例。這個角色含有選擇合適的產品對象的邏輯,而這個邏輯是與應用系統的商業邏輯緊密相關的。

抽象產品(Abstract Product)角色:擔任這個角色的類是工廠方法模式所創建的對象的父類,或它們共同擁有的接口。

具體產品(Concrete Product)角色:抽象工廠模式所創建的任何產品對象都是某一個具體產品類的實例。這是客戶端最終需要的東西,其內部一定充滿了應用系統的商業邏輯。

 

*/
/////////////////////////////////////////////////////////////////////////

class Text;
class Button;
//抽象工廠
class AbstractFactory
{
public:
 virtual Text*   CreateText() = 0;
 virtual Button* CreateButton() = 0;
 
};

//具體工廠
class UnixFactory : public AbstractFactory
{
public:
 Text*   CreateText();
 Button* CreateButton();
};

//具體工廠
class WindowsFactory : public AbstractFactory
{
public:
 Text*   CreateText();
 Button* CreateButton();
};
#endif

 

 

///////////////////////////////////

#include "stdafx.h"
#include "Factory.h"
#include <iostream>
//Factory.cpp

#include "Button.h"
#include "Text.h"

using namespace std;

 

Button* WindowsFactory::CreateButton()
{
 cout<<"WindowsFactory::CreateButton"<<endl;
 return new WindowsButton;
}

Text* WindowsFactory::CreateText()
{
 cout<<"WindowsFactory::CreateText"<<endl;
 return  new WindowsText;
}


Button* UnixFactory::CreateButton()
{
 cout<<"UnixFactory::CreateButton"<<endl;
 return  new UnixButton;
}

Text* UnixFactory::CreateText()
{
 cout<<"UnixFactory::CreateText"<<endl;
 return  new UnixText;
}

 

///////////////////////////////////

 

//Button.h

#ifndef DEF_BUTTON_H_
#define DEF_BUTTON_H_
/////////////////////////////////////////////////////////////////////////
/*

抽象產品(Abstract Product)角色:擔任這個角色的類是工廠方法模式所創建的對象的父類,或它們共同擁有的接口。

具體產品(Concrete Product)角色:抽象工廠模式所創建的任何產品對象都是某一個具體產品類的實例。這是客戶端最終需要的東西,其內部一定充滿了應用系統的商業邏輯。

*/
/////////////////////////////////////////////////////////////////////////

//抽象產品
class Button
{
public:
 virtual void Create() = 0;
};

//具體產品
class UnixButton : public Button
{
public:
 virtual void Create();
};

//具體產品
class WindowsButton : public Button
{
public:
 virtual void Create();
};

#endif

 

 

 

 

//button.cpp
#include "stdafx.h"
#include "Button.h"
#include <iostream>

using namespace std;


void UnixButton::Create()
{
 cout<<"UnixButton::Create"<<endl;
}

 

void WindowsButton::Create()
{
 cout<<"WindowsButton::Create"<<endl;
}

 

 

//Enviroment.h
#ifndef DEF_ENVIROMENT_H_
#define DEF_ENVIROMENT_H_
#include "Factory.h"

enum SystemEnviroment
{
 enum_Unix_Enviroment,
 enum_Windows_Enviroment
};

class Enviroment
{
public:
 Enviroment();
 void Run(SystemEnviroment aoEnviroment);
private:
 void RunTest(AbstractFactory* apFactory);
};
#endif

 

 

 

 

#include "stdafx.h"
#include "Enviroment.h"
#include "Button.h"
#include "Text.h"

Enviroment::Enviroment()

}

void Enviroment::Run(SystemEnviroment aoEnviroment)
{
 AbstractFactory* lpFactory = NULL;


 switch(aoEnviroment)
 {
 case enum_Unix_Enviroment:
  {
   lpFactory = new WindowsFactory;
   RunTest(lpFactory);
  }
  break;
 case enum_Windows_Enviroment:
  {
   lpFactory = new UnixFactory;
   RunTest(lpFactory);
  }
  break;
 }

 delete lpFactory;
 lpFactory = NULL;
 

}

void Enviroment::RunTest(AbstractFactory* apFactory)
{
 Button* lpButton = NULL;
 Text*   lpText = NULL;

 lpButton = apFactory->CreateButton();
 lpButton->Create();

 lpText = apFactory->CreateText();
 lpText->Creat();

 delete lpButton;
 lpButton  = NULL;

 delete lpText;
 lpText = NULL;
}

 

//Text.h
#ifndef DEF_TEXT_H_
#define DEF_TEXT_H_
/////////////////////////////////////////////////////////////////////////
/*
抽象產品(Abstract Product)角色:擔任這個角色的類是工廠方法模式所創建的對象的父類,或它們共同擁有的接口。

具體產品(Concrete Product)角色:抽象工廠模式所創建的任何產品對象都是某一個具體產品類的實例。這是客戶端最終需要的東西,其內部一定充滿了應用系統的商業邏輯。

*/
/////////////////////////////////////////////////////////////////////////

//抽象產品
class Text
{
public:
 virtual void Creat() = 0;
};

//具體產品
class UnixText : public Text
{
public:
 virtual void Creat();
};

//具體產品
class WindowsText : public Text
{
public:
 virtual void Creat();
};
#endif

 


#include "stdafx.h"
#include "Text.h"
#include <iostream>
using namespace std;

void UnixText::Creat()
{
 cout<<"UnixText::Creat()"<<endl;
}

void WindowsText::Creat()
{
 cout<<"WindowsText::Creat()"<<endl;
}

 

 


#include "stdafx.h"
#include "Enviroment.h"

 

 

int _tmain(int argc, _TCHAR* argv[])
{

 Enviroment loTestEnviroment;
 loTestEnviroment.Run(enum_Unix_Enviroment);
 loTestEnviroment.Run(enum_Windows_Enviroment);
 return 0;
}

 

 

 

 

 

 

 

 

 

 

發佈了25 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章