简单工厂模式

【参考】http://www.cnblogs.com/zhangchenliang/p/3700820.html

简单工厂模式又叫静态工厂模式,顾名思义,它是用来实例化目标类的静态类。是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类

 

简单工厂模式中包含的角色及其相应的职责如下:

工厂角色(Creator):这是简单工厂模式的核心,由它负责创建所有的类的内部逻辑。当然工厂类必须能够被外界调用,创建所需要的产品对象。

抽象(Product)产品角色:简单工厂模式所创建的所有对象的父类,注意,这里的父类可以是接口也可以是抽象类,它负责描述所有实例所共有的公共接口。

具体产品(ConcreteProduct)角色:简单工厂所创建的具体实例对象,这些具体的产品往往都拥有共同的父类。


简单工厂模式又叫静态方法模式(因为工厂类都定义了一个静态方法),由一个工厂类根据传入的参数决定创建出哪一种产品类的实例。简单工厂模式的UML图如下

 

我们以求职为例,主要如下:

 

1、首先定义一个抽象产品角色

//定义工作类接口,有一个求职方法
public interface IJobs 
{
	void Profession();
}

2、然后,我们来具体化产品角色

//具体产品A
public class Programmer : IJobs {

	public void Profession()
	{
		Debug.Log("我要找程序员工作");
	}
}


//具体产品B
public class Personnel : IJobs {

	public void Profession()
	{
		Debug.Log("我要找人事的工作");
	}
}

//具体产品C
public class Salesman : IJobs 
{
	public void Profession()
	{
		Debug.Log("我要找销售的工作");
	}
}

3、然后我们定义工厂模式的核心——工厂角色,该类使用静态方法,通过传入的参数来实例化不同对象,然后返回接口类(抽象的产品角色)


//定义枚举,表示可选择的职业
public enum EProfession
{
	programmer,
	personnel,
	salesman
}
//定义工厂模式的人才市场类
public class TalentMarket 
{
	public static IJobs professionSelect(EProfession _EPro)
	{
		switch(_EPro)
		{
			case EProfession.programmer: return new Programmer(); break;
			case EProfession.personnel : return new Personnel() ; break;
			case EProfession.salesman  : return new Salesman()  ; break;
			default :return null; break;
		}
	}
}

4、测试客户端,通过传参数,获得抽象角色类的实例,来调用抽象角色类内的方法。

using UnityEngine;
using System.Collections;

public class JobSelecter : MonoBehaviour {

	//工厂模式客户端
	private IJobs _iJobs;

	void Start () 
	{
		//选择程序员工作
		_iJobs = TalentMarket.professionSelect(EProfession.programmer);
		_iJobs.Profession();

		//选择人事工作
		_iJobs = TalentMarket.professionSelect(EProfession.personnel);
		_iJobs.Profession();

		//选择销售员工作
		_iJobs = TalentMarket.professionSelect(EProfession.salesman);
		_iJobs.Profession();
	}

}

5、优点与缺点

优点:

解决了客户端直接依赖于具体对象的问题

简单工厂模式也起到了代码复用的作用,将复用代码放入工厂中

缺点:

工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都会受到影响(修改工厂类中的方法(也就是多加case语句,没应用简单工厂模式之前,修改的是客户类)。)

系统扩展困难。 旦添加新产品就不得不修改工厂逻辑,这样就会造成工厂逻辑过于复杂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值