抽象工厂(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;
}

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值