工厂方法模式(FactoryMethodPattern)
2015-11-25 16:06
169 查看
修炼工厂方法模式的心法如下:
1) 抽象工厂角色Creator:是工厂方法模式的核心,与应用程序无关。在此模式中创建的对象的工厂类必须实现这个接口。
2) 具体工厂角色ConcreteCreator:这是实现抽象工厂接口的具体工厂类,包含于应用程序密切相关的逻辑,并且由应用程序调用来创建产品对象。
3) 抽象产品角色Product:工厂方法模式所创建的对象的基类型或接口,也就是产品对象的共同父类或共同拥有的接口。
4)具体产品角色ConcreteProduct:这个角色实现了抽象产品角色所定义的接口。具体的产品有专门的具体工厂创建,他们之间往往一一对应。
客户端
转载:http://www.manew.com/thread-37874-1-1.html
1) 抽象工厂角色Creator:是工厂方法模式的核心,与应用程序无关。在此模式中创建的对象的工厂类必须实现这个接口。
2) 具体工厂角色ConcreteCreator:这是实现抽象工厂接口的具体工厂类,包含于应用程序密切相关的逻辑,并且由应用程序调用来创建产品对象。
3) 抽象产品角色Product:工厂方法模式所创建的对象的基类型或接口,也就是产品对象的共同父类或共同拥有的接口。
4)具体产品角色ConcreteProduct:这个角色实现了抽象产品角色所定义的接口。具体的产品有专门的具体工厂创建,他们之间往往一一对应。
using UnityEngine; using System.Collections; using System; namespace FactoryMethod { // 抽象工厂 public abstract class CreatorResourceFactory { public abstract ResourceManage CreateFactroy(); } /// <summary> /// 具体工厂 /// </summary> // UI管理 public class UIResourceManageFactory:CreatorResourceFactory { public override ResourceManage CreateFactroy() { return new UIResourceManage(); } } // 音效管理 public class AudioResourceManageFactory:CreatorResourceFactory { public override ResourceManage CreateFactroy() { return new AudioResourceManage(); } } /// <summary> /// 抽象产品 /// </summary> public abstract class ResourceManage { public abstract void LoadConfig(string path); public abstract void LoadAsset(string name); public abstract void UnLoadResource(bool state); } /// <summary> /// 具体产品 /// </summary> // Client UIResourceManage public class UIResourceManage :ResourceManage { public override void LoadConfig(string path) { Debug.Log("ui 路径:"+path); } public override void LoadAsset(string name) { Debug.Log("ui资源名字:" + name); } public override void UnLoadResource(bool state) { Debug.Log("ui 是否加载:" + state); } } // Client AudioResourceManage public class AudioResourceManage : ResourceManage { public override void LoadConfig(string path) { Debug.Log("Audio路径:" + path); } public override void LoadAsset(string name) { Debug.Log("Audio资源名字:" + name); } public override void UnLoadResource(bool state) { Debug.Log("Audio是否加载:" + state); } } }
客户端
using UnityEngine; using System.Collections; public class ResourceFactoryMethodClient : MonoBehaviour { // Use this for initialization // 定义具体产品工厂 FactoryMethod.CreatorResourceFactory uiResourceManager; FactoryMethod.CreatorResourceFactory audioResourceManager; // 定义具体产品 FactoryMethod.ResourceManage uiManager; FactoryMethod.ResourceManage audioManager; void Start () { //从抽象工厂到具体工厂 uiResourceManager = new FactoryMethod.UIResourceManageFactory(); audioResourceManager = new FactoryMethod.AudioResourceManageFactory(); } void OnGUI() { if (GUILayout.Button ("ui管理")) { uiManager = uiResourceManager.CreateFactroy(); uiManager.LoadAsset("Cc"); uiManager.LoadConfig("UI"); uiManager.UnLoadResource(false); } if (GUILayout.Button ("Auido管理")) { audioManager = audioResourceManager.CreateFactroy(); audioManager.LoadAsset("Jj"); audioManager.LoadConfig("Audio"); audioManager.UnLoadResource(false); } } }
转载:http://www.manew.com/thread-37874-1-1.html
相关文章推荐
- Matlab注释多行和取消多行注释的快捷键
- 关于hadoop的HA集群配置和搭建
- OpenCV 视频与图片序列相互转换
- 使用Lambda表达式遍历集合(forEach方法)
- 信息学奥林匹克竞赛-级数求和
- 细碎的sql 语句
- java实现链表反转
- 自定义 push 和 pop 实现有趣的相册翻开效果
- iOS自定义键盘
- 欢迎使用CSDN-markdown编辑器
- 开发小技巧集锦
- maven 命令备忘
- 2015-11-25 错误描述(Jboss启动,sql执行)
- 解决 UITableview 分割线右移15像素问题
- Objective-C 的现代语法和新特性
- 使用_ObjectiveCBridgeable协议实现Objective-C类与Swift结构体的无缝互转
- SIP中的DNS查询过程
- Robort In Maze问题
- [感悟]性能测试测什么
- 7.数据库、Contentobserver