简单工厂模式

写好的代码就是为了以后少写一些代码。

简单工厂就是一个创建模式。假设一个车辆经销商现在经销三种车辆:大众、奥迪和福特。然后他向工厂要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);
		}
	}
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值