Factory设计模式的一个实例

原创 2007年10月12日 13:17:00

 /**
* Car.h
*
*/
#ifndef __CAR_
#define __CAR_
#include <iostream>
class Car
{
public:
 virtual void info() = 0;
};

class Ford : public Car
{
public:
 virtual void info()
 {
  std::cout<<"Ford"<<std::endl;
 }
};

class Toyota : public Car
{
public:
 virtual void info()
 {
  std::cout<<"Toyota"<<std::endl;
 }
};

#endif

/**
* CarFactory.h
*/
// For this example, the Car class is assumed to already exist.
#include "Car.h"

class CarFactory
{
public:
 CarFactory();
 Car* requestCar();
 int getNumCarsInProduction() const;
protected:
 virtual Car* createCar() = 0;
private:
 int mNumCarsInProduction;
};

class FordFactory : public CarFactory
{
protected:
 virtual Car* createCar();
};

class ToyotaFactory : public CarFactory
{
protected:
 virtual Car* createCar();
};

/**
* CarFactory.cpp
*/
#include "CarFactory.h"
// Initialize the count to zero when the factory is created.

CarFactory::CarFactory() : mNumCarsInProduction(0){}

// Increment the number of cars in production and return the
// new car.
Car* CarFactory::requestCar()
{
 mNumCarsInProduction++;
 return createCar();
}

int CarFactory::getNumCarsInProduction() const
{
 return mNumCarsInProduction;
}
Car* FordFactory::createCar()
{
 return new Ford();
}
Car* ToyotaFactory::createCar()
{
 return new Toyota();
}

/*
*test.cpp
*/

#include <vector>
#include "Car.h"
#include "CarFactory.h"
using namespace std;

CarFactory* getLeastBusyFactory(const vector<CarFactory*>& inFactories)
{
 if (inFactories.size() == 0) return NULL;
 CarFactory* bestSoFar = inFactories[0];
 
 for (size_t i = 1; i < inFactories.size(); i++)
 {
  if (inFactories[i]->getNumCarsInProduction() <
  bestSoFar->getNumCarsInProduction()) {
   bestSoFar = inFactories[i];
  }
 }
 return bestSoFar;
}

int main(int argc, char** argv)
{
 vector<CarFactory*> factories;
 // Create 3 Ford factories and 1 Toyota factory.
 FordFactory* factory1 = new FordFactory();
 FordFactory* factory2 = new FordFactory();
 FordFactory* factory3 = new FordFactory();
 ToyotaFactory* factory4 = new ToyotaFactory();
 // To get more interesting results, preorder some cars.
 factory1->requestCar();
 factory1->requestCar();
 factory2->requestCar();
 factory4->requestCar();
 // Add the factories to a vector.
 factories.push_back(factory1);
 factories.push_back(factory2);
 factories.push_back(factory3);
 factories.push_back(factory4);
 // Build 10 cars from the least busy factory.
 for (int i = 0; i < 10; i++) {
  CarFactory* currentFactory = getLeastBusyFactory(factories);
  Car* theCar = currentFactory->requestCar();
  theCar->info();
 }
 system("pause");
 return 0;
}

Factory methods are one way to implement virtual constructors: methods that
create objects of different types. For example, the buildCar() method creates both
Toyotas and Fords, depending on the concrete factory object on which it is called.

【java设计模式】之 工厂(Factory)模式

1.工厂模式的定义         工厂模式使用的频率非常高,我们在开发中总能见到它们的身影。其定义为:Define an interface for creating an object, but ...
  • eson_15
  • eson_15
  • 2016年04月23日 10:48
  • 13436

23种设计模式之一(创建型模式)Factory模式

一、简介   继承自QLCDNumber的类实现电子时钟,并增加程序启动欢迎画面。 二、运行图 (1)启动界面 (2)时钟界面,可以修改程序去掉前面的日期。 三、详解 1、启动欢迎界面 ...
  • taiyang1987912
  • taiyang1987912
  • 2015年01月27日 18:57
  • 1208

【java设计模式】之 抽象工厂(Abstract Factory)模式

1. 女娲的失误         上一节学习了工厂模式,女娲运用了该模式成功创建了三个人种,可是问题来了,她发现没有性别……这失误也忒大了点吧……竟然没有性别,那岂不是……无奈,只好抹掉重来了,于是所...
  • eson_15
  • eson_15
  • 2016年04月26日 23:49
  • 11293

每天一个设计模式之Factory

属于Creational Design Patterns。用于创建concrete class。 Intent creates objects without exposing the instan...
  • OnlyQi
  • OnlyQi
  • 2011年04月23日 16:35
  • 1143

Net设计模式实例之工厂方法模式( Factory Method Pattern)

一、工厂方法模式简介(Brief Introduction) 工厂方法模式(Factory Method Pattern),定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实...
  • my98800
  • my98800
  • 2017年01月15日 10:45
  • 148

大话设计模式--工厂模式 factory -- C++实现实例

实现《大话设计模式》的C++版本。。。   1. 工厂模式 使用的范围是 同一个基类,下面很多子类。 (1)这里很容易出现的一个问题n多的子类继承自抽象基类,我们不得不在每次要用到子类的地方就编写诸如...
  • xj626852095
  • xj626852095
  • 2013年10月07日 15:53
  • 590

设计模式实例之工厂方法模式( Factory Method Pattern) 2

一、工厂方法模式简介(Brief Introduction) 工厂方法模式(Factory Method Pattern),定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实...
  • wangweiyan89
  • wangweiyan89
  • 2013年05月15日 14:55
  • 458

设计模式实例(Lua)笔记之一(Factory Method工厂方法模式)

1.描述    女娲补天的故事大家都听说过吧,今天不说这个,说女娲创造人的故事,可不是“造人”的工作,这个词被现代人滥用了。这个故事是说,女娲在补了天后,下到凡间一看,哇塞,风景太优美了,天空是湛蓝的...
  • my183100521
  • my183100521
  • 2015年08月19日 22:25
  • 1410

Net设计模式实例之抽象工厂模式(Abstract Factory Pattern)

一、抽象工厂模式简介(Bref Introduction) 抽象工厂模式(Abstract Factory Pattern),提供一个创建一系列相关或者相互依赖对象的接口,而无需制定他们的具体类。优...
  • my98800
  • my98800
  • 2017年01月15日 10:44
  • 108

Net设计模式实例之抽象工厂模式(Abstract Factory Pattern)

Net设计模式实例之抽象工厂模式(Abstract Factory Pattern)一、抽象工厂模式简介(Bref Introduction)抽象工厂模式(Abstract Factory Patte...
  • jimtom
  • jimtom
  • 2011年05月19日 13:44
  • 167
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Factory设计模式的一个实例
举报原因:
原因补充:

(最多只允许输入30个字)