写好的代码就是为了以后少写一些代码。
简单工厂就是一个创建模式。假设一个车辆经销商现在经销三种车辆:大众、奥迪和福特。然后他向工厂要20辆车,这20辆车什么牌子的都无所谓。这样三种车的工厂就开始生产。然后经销商随机挑选车,最后组成一个车队,并打印车队的名称。简单工厂不关心具体产品,只是向相应的工厂发订单。
C++代码:
// 车辆.h
#pragma once
namespace hangba
{
namespace designpattern
{
class 车辆
{
public:
车辆();
~车辆();
public:
virtual void 报告名称() = 0;
};
}
}
// 车辆.cpp
#include "stdafx.h"
#include "车辆.h"
using namespace hangba::designpattern;
车辆::车辆()
{
}
车辆::~车辆()
{
}
// 车辆工厂.h
#pragma once
#include "车辆.h"
namespace hangba
{
namespace designpattern
{
class 车辆工厂
{
public:
车辆工厂();
virtual ~车辆工厂();
public:
virtual 车辆* 生产() = 0;
};
}
}
// 车辆工厂.cpp
#include "stdafx.h"
#include "车辆工厂.h"
using namespace hangba::designpattern;
车辆工厂::车辆工厂()
{
}
车辆工厂::~车辆工厂()
{
}
// 奥迪车.h
#pragma once
#include "车辆.h"
namespace hangba
{
namespace designpattern
{
class 奥迪车 : public 车辆
{
public:
奥迪车();
~奥迪车();
void 报告名称();
};
}
}
// 奥迪车.cpp
#include "stdafx.h"
#include "奥迪车.h"
#include <iostream>
using namespace std;
using namespace hangba::designpattern;
奥迪车::奥迪车()
{
}
奥迪车::~奥迪车()
{
}
void 奥迪车::报告名称()
{
cout << "奥迪车";
}
// 福特车.h
#pragma once
#include "车辆.h"
namespace hangba
{
namespace designpattern
{
class 福特车 : public 车辆
{
public:
福特车();
~福特车();
void 报告名称();
};
}
}
// 福特车.cpp
#include "stdafx.h"
#include "福特车.h"
#include <iostream>
using namespace std;
using namespace hangba::designpattern;
福特车::福特车()
{
}
福特车::~福特车()
{
}
void 福特车::报告名称()
{
cout << "福特车";
}
// 大众车.h
#pragma once
#include "车辆.h"
namespace hangba
{
namespace designpattern
{
class 大众车 : public 车辆
{
public:
大众车();
virtual ~大众车();
void 报告名称();
};
}
}
// 大众车.cpp
#include "stdafx.h"
#include "大众车.h"
#include <iostream>
using namespace std;
using namespace hangba::designpattern;
大众车::大众车()
{
}
大众车::~大众车()
{
}
void 大众车::报告名称()
{
cout << "大众车";
}
// 奥迪工厂.h
#pragma once
#include "车辆工厂.h"
namespace hangba
{
namespace designpattern
{
class 奥迪工厂 : public 车辆工厂
{
public:
奥迪工厂();
~奥迪工厂();
车辆* 生产();
};
}
}
// 奥迪工厂.cpp
#include "stdafx.h"
#include "奥迪工厂.h"
#include "奥迪车.h"
#include <iostream>
using namespace std;
using namespace hangba::designpattern;
奥迪工厂::奥迪工厂()
{
}
奥迪工厂::~奥迪工厂()
{
}
车辆* 奥迪工厂::生产()
{
车辆* car = new 奥迪车();
cout << "奥迪工厂生产了一台[";
car->报告名称();
cout << "]" << endl;
return car;
}
// 福特工厂.h
#pragma once
#include "车辆工厂.h"
namespace hangba
{
namespace designpattern
{
class 福特工厂 : public 车辆工厂
{
public:
福特工厂();
~福特工厂();
车辆* 生产();
};
}
}
// 福特工厂.cpp
#include "stdafx.h"
#include "福特工厂.h"
#include "福特车.h"
#include <iostream>
using namespace std;
using namespace hangba::designpattern;
福特工厂::福特工厂()
{
}
福特工厂::~福特工厂()
{
}
车辆* 福特工厂::生产()
{
车辆* car = new 福特车();
cout << "福特工厂生产了一台[";
car->报告名称();
cout << "]" << endl;
return car;
}
// 大众工厂.h
#pragma once
#include "车辆工厂.h"
namespace hangba
{
namespace designpattern
{
class 大众工厂 : public 车辆工厂
{
public:
大众工厂();
virtual ~大众工厂();
车辆* 生产();
};
}
}
// 大众工厂.cpp
#include "stdafx.h"
#include "大众工厂.h"
#include "大众车.h"
#include <iostream>
using namespace std;
using namespace hangba::designpattern;
大众工厂::大众工厂()
{
}
大众工厂::~大众工厂()
{
}
车辆* 大众工厂::生产()
{
车辆* car = new 大众车();
cout << "大众工厂生产了一台[";
car->报告名称();
cout << "]" << endl;
return car;
}
// 简单工厂.cpp
// 简单工厂.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "../hangba/designpattern/车辆.h"
#include "../hangba/designpattern/车辆工厂.h"
#include "../hangba/designpattern/奥迪工厂.h"
#include "../hangba/designpattern/大众工厂.h"
#include "../hangba/designpattern/福特工厂.h"
#include <list>
#include <iostream>
using namespace std;
using namespace hangba::designpattern;
int _tmain(int argc, _TCHAR* argv[])
{
车辆工厂* f[3];
f[0] = new 大众工厂();
f[1] = new 福特工厂();
f[2] = new 奥迪工厂();
list<车辆*> cars;
for (int i = 0; i < 20; i++)
{
cars.push_back(f[rand() % 3]->生产());
}
cout << "现在经销商手里的车辆为:" << endl;
for (list<车辆*>::iterator it = cars.begin(); it != cars.end(); it++)
{
(*it)->报告名称();
cout << " ";
delete (*it);
*it = nullptr;
}
cars.clear();
for (int i = 0; i < 3; i++)
{
delete f[i];
f[i] = nullptr;
}
getchar();
return 0;
}
C#代码:
/*
* 由SharpDevelop创建。
* 用户: hangba
* 日期: 2016/3/7
* 时间: 14:26
*
* 要改变这种模板请点击 工具|选项|代码编写|编辑标准头文件
*/
using System;
namespace 简单工厂模式
{
/// <summary>
/// Description of I车辆.
/// </summary>
public interface I车辆
{
String 报告名称();
}
}
/*
* 由SharpDevelop创建。
* 用户: hangba
* 日期: 2016/3/7
* 时间: 14:24
*
* 要改变这种模板请点击 工具|选项|代码编写|编辑标准头文件
*/
using System;
namespace 简单工厂模式
{
/// <summary>
/// Description of I车辆工厂.
/// </summary>
public interface I车辆工厂
{
I车辆 生产();
}
}
/*
* 由SharpDevelop创建。
* 用户: hangba
* 日期: 2016/3/7
* 时间: 14:28
*
* 要改变这种模板请点击 工具|选项|代码编写|编辑标准头文件
*/
using System;
namespace 简单工厂模式
{
/// <summary>
/// Description of 奥迪车.
/// </summary>
public class 奥迪车 : I车辆
{
public 奥迪车()
{
}
public String 报告名称()
{
return "奥迪车";
}
}
}
/*
* 由SharpDevelop创建。
* 用户: hangba
* 日期: 2016/3/7
* 时间: 14:29
*
* 要改变这种模板请点击 工具|选项|代码编写|编辑标准头文件
*/
using System;
namespace 简单工厂模式
{
/// <summary>
/// Description of 大众车.
/// </summary>
public class 大众车 : I车辆
{
public 大众车()
{
}
public String 报告名称()
{
return "大众车";
}
}
}
/*
* 由SharpDevelop创建。
* 用户: hangba
* 日期: 2016/3/7
* 时间: 14:30
*
* 要改变这种模板请点击 工具|选项|代码编写|编辑标准头文件
*/
using System;
namespace 简单工厂模式
{
/// <summary>
/// Description of 福特车.
/// </summary>
public class 福特车 : I车辆
{
public 福特车()
{
}
public String 报告名称()
{
return "福特车";
}
}
}
/*
* 由SharpDevelop创建。
* 用户: hangba
* 日期: 2016/3/7
* 时间: 14:31
*
* 要改变这种模板请点击 工具|选项|代码编写|编辑标准头文件
*/
using System;
namespace 简单工厂模式
{
/// <summary>
/// Description of 奥迪工厂.
/// </summary>
public class 奥迪工厂 : I车辆工厂
{
public 奥迪工厂()
{
}
public I车辆 生产()
{
I车辆 car = new 奥迪车();
System.Console.WriteLine("奥迪工厂正在生产一辆【{0}】", car.报告名称());
return car;
}
}
}
/*
* 由SharpDevelop创建。
* 用户: hangba
* 日期: 2016/3/7
* 时间: 14:34
*
* 要改变这种模板请点击 工具|选项|代码编写|编辑标准头文件
*/
using System;
namespace 简单工厂模式
{
/// <summary>
/// Description of 大众工厂.
/// </summary>
public class 大众工厂 : I车辆工厂
{
public 大众工厂()
{
}
public I车辆 生产()
{
I车辆 car = new 大众车();
System.Console.WriteLine("大众工厂正在生产一辆【{0}】", car.报告名称());
return car;
}
}
}
/*
* 由SharpDevelop创建。
* 用户: hangba
* 日期: 2016/3/7
* 时间: 14:35
*
* 要改变这种模板请点击 工具|选项|代码编写|编辑标准头文件
*/
using System;
namespace 简单工厂模式
{
/// <summary>
/// Description of 福特工厂.
/// </summary>
public class 福特工厂 : I车辆工厂
{
public 福特工厂()
{
}
public I车辆 生产()
{
I车辆 car = new 福特车();
System.Console.WriteLine("福特工厂正在生产一辆【{0}】", car.报告名称());
return car;/*
* 由SharpDevelop创建。
* 用户: hangba
* 日期: 2016/3/7
* 时间: 11:54
*
* 要改变这种模板请点击 工具|选项|代码编写|编辑标准头文件
*/
using System;
using System.Collections.Generic;
namespace 简单工厂模式
{
class Program
{
public static void Main(string[] args)
{
List<I车辆> cars = new List<I车辆>();
I车辆工厂[] f = { new 大众工厂(), new 福特工厂(), new 奥迪工厂() };
System.Random r = new System.Random();
for (int i = 0; i < 20; i++)
{
int rand = r.Next() % f.Length;
cars.Add(f[rand].生产());
}
Console.WriteLine("经销商手里的车辆有:");
foreach (I车辆 car in cars) {
Console.Write("{0} ", car.报告名称());
}
Console.WriteLine();
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}