c++抽象工厂模式
2015-10-02 22:01
267 查看
// ConsoleApplication1.cpp : Defines the entry point for the console application.
// 这是违背开放封闭原则的:增加产品需修改工厂类
#include "stdafx.h"
#include <iostream>
//#include "Factory.h"
using namespace std;
class Mobile
{
public:
virtual void display() = 0;
};
class AndroidMobile:public Mobile
{
public:
void display() {cout<<"this is the androidMobile"<<endl;}
};
class IOSMobile:public Mobile
{
public:
void display() {cout<<"this is the iosMobile"<<endl;}
};
class PAD
{
public:
virtual void display() = 0;
};
class IOSPAD:public PAD
{
public:
void display() {cout<<"this is the iosPAD"<<endl;}
};
class AndroidPAD:public PAD
{
public:
void display() {cout<<"this is the androidPAD"<<endl;}
};
class Factory
{
public:
virtual Mobile* CreateMobile() = 0;
virtual PAD* CreatePAD() = 0;
};
class IOSFactory:public Factory
{
public:
Mobile* CreateMobile();
PAD* CreatePAD();
};
Mobile* IOSFactory::CreateMobile()
{
return new IOSMobile;
}
PAD* IOSFactory::CreatePAD()
{
return new IOSPAD;
}
class AndroidFactory:public Factory
{
public:
Mobile* CreateMobile();
PAD* CreatePAD();
};
Mobile* AndroidFactory::CreateMobile()
{
return new AndroidMobile;
}
PAD* AndroidFactory::CreatePAD()
{
return new AndroidPAD;
}
int _tmain(int argc, _TCHAR* argv[])
{
Factory* pAndroidFactory = new AndroidFactory;
Mobile* pMobile = pAndroidFactory->CreateMobile();
pMobile->display();
delete pAndroidFactory;
pAndroidFactory = 0;
delete pMobile;
pMobile = 0;
Factory* pPADFactory = new IOSFactory;
PAD* pIOSPad = pPADFactory->CreatePAD();
pIOSPad->display();
Mobile* pIOSMobile = pPADFactory->CreateMobile();
pIOSMobile->display();
delete pPADFactory;
pPADFactory = 0;
delete pIOSPad;
pIOSPad = 0;
delete pIOSMobile;
pIOSMobile = 0;
getchar();
return 0;
}
// 这是违背开放封闭原则的:增加产品需修改工厂类
#include "stdafx.h"
#include <iostream>
//#include "Factory.h"
using namespace std;
class Mobile
{
public:
virtual void display() = 0;
};
class AndroidMobile:public Mobile
{
public:
void display() {cout<<"this is the androidMobile"<<endl;}
};
class IOSMobile:public Mobile
{
public:
void display() {cout<<"this is the iosMobile"<<endl;}
};
class PAD
{
public:
virtual void display() = 0;
};
class IOSPAD:public PAD
{
public:
void display() {cout<<"this is the iosPAD"<<endl;}
};
class AndroidPAD:public PAD
{
public:
void display() {cout<<"this is the androidPAD"<<endl;}
};
class Factory
{
public:
virtual Mobile* CreateMobile() = 0;
virtual PAD* CreatePAD() = 0;
};
class IOSFactory:public Factory
{
public:
Mobile* CreateMobile();
PAD* CreatePAD();
};
Mobile* IOSFactory::CreateMobile()
{
return new IOSMobile;
}
PAD* IOSFactory::CreatePAD()
{
return new IOSPAD;
}
class AndroidFactory:public Factory
{
public:
Mobile* CreateMobile();
PAD* CreatePAD();
};
Mobile* AndroidFactory::CreateMobile()
{
return new AndroidMobile;
}
PAD* AndroidFactory::CreatePAD()
{
return new AndroidPAD;
}
int _tmain(int argc, _TCHAR* argv[])
{
Factory* pAndroidFactory = new AndroidFactory;
Mobile* pMobile = pAndroidFactory->CreateMobile();
pMobile->display();
delete pAndroidFactory;
pAndroidFactory = 0;
delete pMobile;
pMobile = 0;
Factory* pPADFactory = new IOSFactory;
PAD* pIOSPad = pPADFactory->CreatePAD();
pIOSPad->display();
Mobile* pIOSMobile = pPADFactory->CreateMobile();
pIOSMobile->display();
delete pPADFactory;
pPADFactory = 0;
delete pIOSPad;
pIOSPad = 0;
delete pIOSMobile;
pIOSMobile = 0;
getchar();
return 0;
}
相关文章推荐
- 浅析C/C++中的switch/case陷阱
- effective c++ 以对象管理资源
- C++迭代器 iterator
- 项目26.2分段函数求值(switch语句)
- C++等级考试选择篇(二)
- 关于StdAfx.h和StdAfx.cpp
- 将链串s中的所有子串"abc"删除
- c prime plus第十四章练习题
- 什么是c++中的多态
- C语言的动态数组函数的sizeof、malloc和free
- hduacm 5480 Conturbatio前缀和
- 程序设计基石与实践之C语言指针和数组基础
- C++静态库与动态库
- Google C++ Style Guide的哲学
- Google C++ Style Guide的哲学
- C++学习笔记之类模板
- 一起talk C栗子吧(第五十二回:C语言实例--最小生成树四)
- C++学习笔记之运算符重载例子
- c++primer学习:顺序容器(1)
- 一起talk C栗子吧(第五十一回:C语言实例--最小生成树三)