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

简单工厂模式

时间:2015-07-13 18:48:25      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:

简单工厂模式概述

首先讲需要创建的各种不同对象的相关代码封装到不同的类中,这些类称为具体产品类,而将它们公共的代码进行抽象和提取后封装在一个抽象产品类中,每一个具体产品类是抽象产品类的子类;然后提供一个工厂类用于创建各种产品,在工厂类中提供一个创建产品的工厂方法,该方法可以很据所传入的参数不同创建不同的具体产品对象;客户端只需要调用工厂类的工厂方法并传入相应的参数即可以得到一个产品对象。

简单工厂模式定义

定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。
简单工厂模式的要点在于:当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节。

简单工厂模式的结构设计

技术分享
简单工厂模式结构图中包含以下3个角色
(1) Factory(工厂角色):即工厂类,它是简单工厂模式的核心,负责实现创建所有产品实例的内部逻辑;工厂类可以被外界直接调用,创建所需的产品对象;在工厂类中提供了静态的工厂方法factoryMethod(),它的返回类型为抽象产品类型Product。
(2)Product(抽象产品角色):它是工厂类所创建的所有对象的父类,封装了各种产品对象的公有方法,它的引入将提高系统的灵活性,使得在工厂类中只需要定义一个通用的工厂方法,因为所创建的具体产品对象都是其子类对象。
(3)具体产品角色(ConcreteProduct):它是简单工厂模式的创建目标,所有被创建的对象都充当这个角色的某个具体类的实例。

简单工厂模式的应用

软件公司欲基于Java语言开发一套图表库,该图表库可以为应用系统提供各种不同外观的图表,例如柱状图、饼状图和折线图等。Sunny软件公司图表库设计人员希望开发出一套灵活易用的图表库,而且较为方便的对图表库进行扩展,以便在将来能增加一些新类型的图表。
代码如下:
#include <string>
using namespace std;
//抽象图表接口:抽象产品类
class Chart{
public:
	virtual void display()=0; 
};

//柱状图表:具体产品类
class HistogramChart :public Chart{
public:
	HistogramChart(){
		cout<<"创建柱状图"<<endl;
	}
	void display(){
		cout<<"显示柱状图"<<endl;
	}
};

//饼状图表:具体产品类
class PipeChart:public Chart{
public:
	PipeChart(){
		cout<<"创建饼状图"<<endl;
	}
	void display(){
		cout<<"显示饼状图"<<endl;
	}
};

//折线图类:具体产品类
class LineChart:public Chart{
public:
	LineChart(){
		cout<<"创建折线图"<<endl;
	}
	void display(){
		cout<<"显示折线图"<<endl;
	}
};

//图表工厂类:工厂类
class ChartFactory{
public:
	static Chart* getChart(string arg){
		Chart *chart=NULL;
		int i=0;
		while(arg[i]){
			arg[i]=tolower(arg[i]);
			i++;
		}
		if(arg=="histogramchart"){
			cout<<"初始化设置柱状图"<<endl;
			chart=new HistogramChart();
		}
		else if(arg=="pipechart"){
			chart=new PipeChart();
			cout<<"初始化设置饼状图"<<endl;
		}
		else if(arg=="linechart"){
			chart=new LineChart();
			cout<<"初始化设置折线图"<<endl;
		}
		return chart;
	}
};

int main(){
	Chart* chart=NULL;
	chart=ChartFactory::getChart("PipeChart");
	if(chart==NULL)
		cout<<"参数不正确"<<endl;
	else
		chart->display();
	return 0;
}


简单工厂模式总结

简单工厂模式提供了专门的工厂类用于创建对象,将对象的创建和对象的使用分离开。

主要优点

1.简单工厂模式实现了对象的创建和使用分离。

主要缺点

1.工厂类集中了所有产品的创建逻辑,职责过重,一但不能正常工作,整个系统都要受影响。
2.增加了系统中类的个数,增加了系统的复杂度和理解难度。
3.系统扩展困难,一但添加新的产品不得不修改工厂逻辑。

适用场景

1.客户端只知道传入工厂类的参数,对于如何创建对象并不关心。


版权声明:本文为博主原创文章,未经博主允许不得转载。

简单工厂模式

标签:

原文地址:http://blog.csdn.net/sxhlovehmm/article/details/46862783

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