您的位置:首页 > 其它

FACTORY METHOD(工厂模式)

2016-05-01 19:54 357 查看
1. 意图

定义一个用于创建对象的接口,让子类决定实例化哪一个类。 Factory Method使一个类的

实例化延迟到其子类。

2. 别名

虚构造器(Virtual Constructor)

3. 适用性

在下列情况下可以使用Factory Method模式:

• 当一个类不知道它所必须创建的对象的类的时候。

• 当一个类希望由它的子类来指定它所创建的对象的时候。

• 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类

是代理者这一信息局部化的时候。

4. 结 构



5. 参与者

• Product

— 定义工厂方法所创建的对象的接口。

• ConcreteProduct

— 实现Product接口。

• Creator

— 声明工厂方法,该方法返回一个 Product类型的对象。Creator也可以定义一个工厂方

法的缺省实现,它返回一个缺省的 ConcreteProduct对象。

— 可以调用工厂方法以创建一个Product对象。

• ConcreteCreator

— 重定义工厂方法以返回一个ConcreteProduct实例。

6. 协作

• Creator依赖于它的子类来定义工厂方法,所以它返回一个适当的 ConcreteProduct实例

7.代码实现

假如我们的游戏要对接多个平台,比如腾讯,360,平台SDK中都要求有登录,注册等信息。这时我们就可以使用工厂模式来使得对接不同的平台时代码变得容易

代码结构如下图



这里的ISDK和TencentSDK对应4结构中的Product和ConcreteProduct,具体代码如下

using UnityEngine;
using System.Collections;

public interface ISDK  {
void Login();
void Register();
}


using UnityEngine;
using System.Collections;
using System;

public class TencentSDK : ISDK
{
public void Login()
{
throw new NotImplementedException();
}

public void Register()
{
throw new NotImplementedException();
}
}


ISDKFactor和TencentSDKFactorCreate对应4结构中的Creator和ConcreteCreator,具体代码如下

using UnityEngine;
using System.Collections;

public interface ISDKFactor  {
ISDK CreateSDK();
}


using UnityEngine;
using System.Collections;
using System;

public class TencentSDKFactorCreate : ISDKFactor
{
public ISDK CreateSDK()
{
return new TencentSDK();
}
}


客户端使用部分可以这样

using UnityEngine;
using System.Collections;

public class SDKClient : MonoBehaviour {

// Use this for initialization
public ISDKFactor iSDKFactor;
public ISDK iSDK;
void Start () {
iSDKFactor = new TencentSDKFactorCreate();
iSDK = iSDKFactor.CreateSDK();
}

}
如果我们要把腾讯的SDK改成使用360的SDK只需要把这一句改成360的即可



这里在C#中可以使用配置表加反射的机制,来决定使用哪一个SDK,这样就可以直接在配置表中配置而不用修改客户端的代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: