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,具体代码如下
ISDKFactor和TencentSDKFactorCreate对应4结构中的Creator和ConcreteCreator,具体代码如下
客户端使用部分可以这样
这里在C#中可以使用配置表加反射的机制,来决定使用哪一个SDK,这样就可以直接在配置表中配置而不用修改客户端的代码
定义一个用于创建对象的接口,让子类决定实例化哪一个类。 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,这样就可以直接在配置表中配置而不用修改客户端的代码
相关文章推荐
- 三四月找实习总结
- 个人冲刺06
- HDU 4709:Herding
- KindlePW3壁纸越狱设置问题
- Leetcode 15. 3Sum
- rt3070无线网卡工作在AP模式----fl2440开发板
- QDialog 添加最大化、最小化按钮和关闭按钮,并且要正常显示
- opencv异常提示之 npoints2 >= 0 || npoints3 >= 0 in fitLine
- 《机器学习实战》学习笔记——第3章 决策树
- java如何获取其它用户登录的真是IP地址
- RxJava-简介及Observable创建
- 最优配对问题
- hdu 2149
- HDU 4708:Rotation Lock Puzzle
- POJ 1523 SPF 点双连通分量
- SPOJ GSS1 Can you answer these queries I
- 友元
- laravel5分钟完成登录注册
- CentOS6.5安装Redis数据库
- 20145225《Java程序设计》 第9周学习总结