简单工厂模式

来源:互联网 发布:判断矩阵的一致性检验 编辑:程序博客网 时间:2024/06/07 08:45

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

简单工厂就是一个创建模式。假设一个车辆经销商现在经销三种车辆:大众、奥迪和福特。然后他向工厂要20辆车,这20辆车什么牌子的都无所谓。这样三种车的工厂就开始生产。然后经销商随机挑选车,最后组成一个车队,并打印车队的名称。简单工厂不关心具体产品,只是向相应的工厂发订单。

C++代码:

// 车辆.h#pragma oncenamespace 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);}}}


0 0
原创粉丝点击