码迷,mamicode.com
首页 > 其他好文 > 详细

Abstract Factory Design Pattern 抽象工厂设计模式 - 总结

时间:2014-08-02 18:24:53      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:des   blog   http   使用   io   for   2014   ar   

Abstract Factory Design Pattern 就是一般的Factory Design Pattern的进一步设计,增加一个抽象工厂,然后利用这个工厂可以创建不同基类的类。

当我们需要创建更多不同类的时候就可以使用这个设计模式了。

这个设计模式的代码相对会多点,但是其中的思想就是一般Factory Design Pattern,然后集合更多的基类,看起来挺大的一个设计模式,其思想是挺简单的。

其中具体的实现细节当然是可以有多种实现方法的:

1 利用Factory的基类衍生出不同的Factory,使用这些不同的Factory类创建不同基类的类对象,可以认为不同种类的对象。

2 利用一个Factory类,然后利用参数传递,根据不同的参数创建出不同的基类对象。 - 传递参数入类,或者传递参数进创建函数都是可以的。


最后,本博客已经写完了GOF的所有23中设计模式了,并给出了C++的具体可运行实现代码。

总结一下学设计模式的心得:

1 一定要自己用代码实现,可以由代码入手也是不错的选择,因为直接看GOF的书,的确是写得比较抽象的,但是有一定代码基础了,那么就可以把很多知识点连接起来了,会实现了,什么都会变得简单理解很多了。

2 不要过于拘泥于理论,记熟了也没什么用,主要还是应用为主吧,像本人的项目中,如今都已经有意识地在使用这些设计模式了,尤其是单一设计模式,builder设计模式,Factory设计模式等非常常用的设计模式,多用就有感觉了。当然也不能无视理论。

3 设计模式虽然给人感觉是高深莫测的,不过撕开了神秘面纱之后,一切都变得简单了,很多都是一些简单的算法的实现,算法其实是无处不在啊,说算法没什么用处的人,我敢说这些人99.999%的算法水平都不怎么样。


最后贴上Abstract Factory Design Pattern的代码:

#include <stdio.h>
#include <string>
using namespace std;

class Shape
{
public:
	virtual void getShape()
	{
		puts("Shape");
	}
};

class Cycle:public Shape
{
public:
	void getShape()
	{
		puts("Cycle");
	}
};

class Ellipse:public Shape
{
public:
	void getShape()
	{
		puts("Ellipse");
	}
};

class Car
{
public:
	virtual void getCar()
	{
		puts("Car");
	}
};

class Rolls_Royce:public Car
{
public:
	void getCar()
	{
		puts("Rolls-Royce");
	}
};

class Ford:public Car
{
public:
	void getCar()
	{
		puts("Ford");
	}
};

class Factory
{
public:
	Shape *createShape(string shape)
	{
		if (shape == "Cycle")
		{
			return new Cycle;
		}
		else if (shape == "Ellipse")
		{
			return new Ellipse;
		}
		return new Shape;
	}

	Car *createCar(string car)
	{
		if (car == "Rolls-Royce")
		{
			return new Rolls_Royce;
		}
		else if (car == "Ford")
		{
			return new Ford;
		}
		return new Car;
	}
};

class ShapeFactory : public Factory
{
public:
	Shape *createCycle()
	{
		return new Cycle;
	}
	Shape *createEllipse()
	{
		return new Ellipse;
	}
};

class CarFactory : public Factory
{
public:
	Car *createRolls_Royce()
	{
		return new Rolls_Royce;
	}

	Car *createFord()
	{
		return new Ford;
	}
};

int main()
{
	//使用一个工厂类对象可以创建不同的对象
	puts("Using one class to create all needed factory");
	Factory factory;
	Shape *shape = factory.createShape("Cycle");
	shape->getShape();
	delete shape;
	shape = factory.createShape("Ellipse");
	shape->getShape();
	delete shape;

	Car *car = factory.createCar("Rolls-Royce");
	car->getCar();
	delete car;
	car = factory.createCar("Ford");
	car->getCar();
	delete car;

	//使用不同的衍生类工厂创建不同的类对象测试
	puts("\nUse different factory class to create different objects");
	ShapeFactory *fac = new ShapeFactory;
	shape = fac->createCycle();
	shape->getShape();
	delete shape;
	shape = fac->createEllipse();
	shape->getShape();
	delete shape;
	delete fac;

	CarFactory *cf = new CarFactory;
	car = cf->createRolls_Royce();
	car->getCar();
	delete car;
	car = cf->createFord();
	car->getCar();
	delete car;
	delete cf;

	return 0;
}

bubuko.com,布布扣


Abstract Factory Design Pattern 抽象工厂设计模式 - 总结,布布扣,bubuko.com

Abstract Factory Design Pattern 抽象工厂设计模式 - 总结

标签:des   blog   http   使用   io   for   2014   ar   

原文地址:http://blog.csdn.net/kenden23/article/details/38349457

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!