工厂方法和抽象工厂
来源:互联网 发布:赚钱任务网站源码 编辑:程序博客网 时间:2024/04/28 03:29
工厂方法和抽象工厂实际上是从不同角度在描述问题。
工厂方法描述了具体产品的创建,而抽象工厂描述的是产品系列的组织。
// Computer.cpp : Defines the entry point for the console application.
//
#include " stdafx.h "
#include < string >
#include < iostream >
using namespace std;
class Ram {};
class IBMRam: public Ram {};
class HPRam: public Ram {};
class Cpu {};
class IBMCpu: public Cpu {};
class HPCpu: public Cpu {};
class Computer
{
public :
Computer(string strName, Ram* pRam, Cpu* pCpu)
{
m_strName = strName;
m_pRam = pRam;
m_pCpu = pCpu;
cout<< " A " << m_strName <<" computer is produced" << endl;
}
~ Computer()
{
delete m_pRam;
delete m_pCpu;
cout<< " A " << m_strName <<" computer is deleted" << endl;
}
public :
string m_strName;
private :
Ram* m_pRam;
Cpu* m_pCpu;
};
class ComputerProducer
{
public :
Computer* createComputer()
{
return new Computer(setName(), createRam(), createCpu());
}
virtual Ram* createRam() = 0 ;
virtual Cpu* createCpu() = 0 ;
virtual string setName() = 0;
};
class IBMProducer: public ComputerProducer
{
public :
virtual Ram* createRam()
{
cout<< " A IBMRam is producted " << endl;
return new IBMRam;
}
virtual Cpu* createCpu()
{
cout<< " A IBMCPU is producted " << endl;
return new IBMCpu;
}
virtual string setName()
{
return string ( "IBM " );
}
};
class HPProducer: public ComputerProducer
{
public :
virtual Ram* createRam()
{
cout<< " A HPRam is producted " << endl;
return new HPRam;
}
virtual Cpu* createCpu()
{
cout<< " A HPCPU is producted " << endl;
return new HPCpu;
}
virtual string setName()
{
return string ( "HP " );
}
};
int main( int argc, char * argv[])
{
// client code
ComputerProducer * pIBMFac = new IBMProducer;
ComputerProducer* pHPFac = new HPProducer;
Computer* pIBMComputer = pIBMFac -> createComputer();
Computer* pHPComputer = pHPFac -> createComputer();
delete pIBMComputer;
delete pHPComputer;
delete pIBMFac;
delete pHPFac;
return 0 ;
}
//
#include " stdafx.h "
#include < string >
#include < iostream >
using namespace std;
class Ram {};
class IBMRam: public Ram {};
class HPRam: public Ram {};
class Cpu {};
class IBMCpu: public Cpu {};
class HPCpu: public Cpu {};
class Computer
{
public :
Computer(string strName, Ram* pRam, Cpu* pCpu)
{
m_strName = strName;
m_pRam = pRam;
m_pCpu = pCpu;
cout<< " A " << m_strName <<" computer is produced" << endl;
}
~ Computer()
{
delete m_pRam;
delete m_pCpu;
cout<< " A " << m_strName <<" computer is deleted" << endl;
}
public :
string m_strName;
private :
Ram* m_pRam;
Cpu* m_pCpu;
};
class ComputerProducer
{
public :
Computer* createComputer()
{
return new Computer(setName(), createRam(), createCpu());
}
virtual Ram* createRam() = 0 ;
virtual Cpu* createCpu() = 0 ;
virtual string setName() = 0;
};
class IBMProducer: public ComputerProducer
{
public :
virtual Ram* createRam()
{
cout<< " A IBMRam is producted " << endl;
return new IBMRam;
}
virtual Cpu* createCpu()
{
cout<< " A IBMCPU is producted " << endl;
return new IBMCpu;
}
virtual string setName()
{
return string ( "IBM " );
}
};
class HPProducer: public ComputerProducer
{
public :
virtual Ram* createRam()
{
cout<< " A HPRam is producted " << endl;
return new HPRam;
}
virtual Cpu* createCpu()
{
cout<< " A HPCPU is producted " << endl;
return new HPCpu;
}
virtual string setName()
{
return string ( "HP " );
}
};
int main( int argc, char * argv[])
{
// client code
ComputerProducer * pIBMFac = new IBMProducer;
ComputerProducer* pHPFac = new HPProducer;
Computer* pIBMComputer = pIBMFac -> createComputer();
Computer* pHPComputer = pHPFac -> createComputer();
delete pIBMComputer;
delete pHPComputer;
delete pIBMFac;
delete pHPFac;
return 0 ;
}
这个例子比较清楚了,不同的工厂生产不同的计算机,但计算机的基本组成(这里假设计算机仅由ram和cpu组成)是一样的,这样的产品系列很适合用抽象工厂来组织。
而在实际生产计算机的时候,createRam()和createCpu()这两个工厂方法又起到了作用。
- 工厂方法和抽象工厂
- 工厂方法和抽象工厂
- 工厂方法和抽象工厂
- 工厂方法和抽象工厂
- 简单工厂、工厂方法和抽象工厂
- 简单工厂、工厂方法和抽象工厂
- 工厂方法和抽象工厂方法
- 抽象工厂 工厂方法
- HeadFirst采访“工厂方法”和“抽象工厂”
- HeadFirst采访“工厂方法”和“抽象工厂”
- HeadFirst采访“工厂方法”和“抽象工厂”
- 设计模式:工厂方法和抽象工厂
- 工厂方法和抽象工厂区别
- 关于抽象工厂和工厂方法
- 工厂方法和抽象工厂的区别
- 工厂方法模式和抽象工厂模式
- java工厂方法和抽象工厂举例
- 工厂方法模式和抽象工厂模式
- C中的静态数据区、代码区、堆、栈
- java的Error和Exception的区别联系
- 最近需要完成的事情
- 软件工厂是否真的可能存在?
- sdcard操作
- 工厂方法和抽象工厂
- heap stack区别简介
- LCS算法详解
- 如果解决测试之痛<特别是单元、集成测试之痛>
- Java虚拟机类装载的原理及实现
- C/c++结构体字节对齐详解
- C++第六周任务4设计一个三角形类,能够输入三角形的三个顶点,求出其面积、周长,并判断其是否为直角三角形和等腰三角形。
- java序列化详解
- Servlet学习:Cookie练习