来说说(AbstractFactory)静态工厂模式
来源:互联网 发布:dnf韩服武神改版数据 编辑:程序博客网 时间:2024/06/16 11:33
1。什么时候需要静态工厂模式?
(1)一个系统要独立于它的产品的创建、组合和表示时。
(2)一个系统要由多个产品系统中的一个来配置时。
(3)当你要强调一系列相关的产品对象的设计以便进行联合使用时。
(4)当你提供一个产品类库,而只想显示它们的接口不是实现时。
2。我们来实现一个静态工厂模式
我们来实现一个UI的静态接口
using System;namespace AbstractFactory{/// <summary>/// 定义UI资源的抽象类/// </summary>public abstract class UIResourceAbstract{public abstract void LoadConfig(string path);public abstract void LoadAsset(string name);public abstract void UnLoadResource(bool status);}}我们在来实现一个Audio的静态接口
using System;namespace AbstractFactory{/// <summary>/// 定义audio 的抽象类/// </summary>public abstract class AudioResoucesAbstract{public abstract void LoadConfig(string path);public abstract void LoadAsset(string name);public abstract void UnLoadResource(bool status);}}我们在继续实现一个ResourceAbstractFactory
using System;/// <summary>/// 静态工厂模式/// </summary>namespace AbstractFactory{public abstract class ResourceAbstractFactory{public abstract UIResourceAbstract CreateUIManager();public abstract AudioResoucesAbstract CreateAudioManager();}}我们在继续实现一个PrimaryUIManager
using System;using UnityEngine;namespace AbstractFactory{public class PrimaryUIManager : UIResourceAbstract{public override void LoadConfig(string path){Debug.Log("PrimaryUIManager: "+path);}public override void LoadAsset(string name){Debug.Log("PrimaryUIManager: "+name);}public override void UnLoadResource(bool status){Debug.Log("PrimaryUIManager: "+status);}}}PrimaryAudioManager实现
using System;using UnityEngine;namespace AbstractFactory{public class PrimaryAudioManager :AudioResoucesAbstract{public override void LoadConfig(string path){Debug.Log("PrimaryAudioManager: "+path);}public override void LoadAsset(string name){Debug.Log("PrimaryAudioManager: "+name);}public override void UnLoadResource(bool status){Debug.Log("PrimaryAudioManager: "+status);}}}在实现一个PrimaryManagerFactory
using System;namespace AbstractFactory{public class PrimaryManagerFactory : ResourceAbstractFactory{public override UIResourceAbstract CreateUIManager(){return new PrimaryUIManager ();}public override AudioResoucesAbstract CreateAudioManager(){return new PrimaryAudioManager();}}}
我们继续来实现Assistant系类的工厂及其创建
using System;using UnityEngine;namespace AbstractFactory{public class AssistantUIManager : UIResourceAbstract{public override void LoadConfig(string path){Debug.Log("AssistantUIManager: "+path);}public override void LoadAsset(string name){Debug.Log("AssistantUIManager: "+name);}public override void UnLoadResource(bool status){Debug.Log("AssistantUIManager: "+status);}}}
using System;using UnityEngine;namespace AbstractFactory{public class AssistantAudioManager : AudioResoucesAbstract{public override void LoadConfig(string path){Debug.Log("AssistantAudioManager: "+path);}public override void LoadAsset(string name){Debug.Log("AssistantAudioManager: "+name);}public override void UnLoadResource(bool status){Debug.Log("AssistantAudioManager: "+status);}}}
using UnityEngine;using System.Collections;namespace AbstractFactory{/// <summary>///定义抽象工厂的具体工厂AssistantManagerFactory/// </summary>public class AssistantManagerFactory : ResourceAbstractFactory{public override UIResourceAbstract CreateUIManager(){return new AssistantUIManager();}public override AudioResoucesAbstract CreateAudioManager(){return new AssistantAudioManager();}}}
好了,我们已经实现完毕了,我们来进行测试。
using System;using UnityEngine;using AbstractFactory;public class ResourceAbstractFactoryClient : MonoBehaviour{ResourceAbstractFactory rfPrimary;AudioResoucesAbstract audioPrimry;UIResourceAbstract uiPrimary;ResourceAbstractFactory rfAssistant;AudioResoucesAbstract audioAssistant;UIResourceAbstract uiAssistant;void Start(){rfPrimary = new PrimaryManagerFactory();rfAssistant = new AssistantManagerFactory();}void OnGUI(){if (GUILayout.Button("主城产品族")){audioPrimry = rfPrimary.CreateAudioManager();audioPrimry.LoadConfig("http:...");audioPrimry.LoadAsset("蛮牛");audioPrimry.UnLoadResource(false);uiPrimary = rfPrimary.CreateUIManager();uiPrimary.LoadConfig("http:...");uiPrimary.LoadAsset("蛮牛");uiPrimary.UnLoadResource(false);}if (GUILayout.Button("副城产品族")){audioAssistant = rfAssistant.CreateAudioManager();audioAssistant.LoadConfig("http:...");audioAssistant.LoadAsset("蛮牛");audioAssistant.UnLoadResource(false);uiAssistant = rfAssistant.CreateUIManager();uiAssistant.LoadConfig("http:...");uiAssistant.LoadAsset("蛮牛");uiAssistant.UnLoadResource(false);}}}
好,我们已经大功告成。在什么时候比较适合这种模式呢?我们更是需要注意下面几点。
如果不存在”多系列对象创建“的需求变化,则没必要应用Abstract Factory模式,静态工厂方法足矣。
"系列对象"指的是这些对象之间有相互依赖、或作用的关系。例如游戏开发场景中的"道路"与"房屋"依赖,“道路”与“地道”的依赖。
Abstract Factory模式主要在于应对"新系列"的需求变动。其缺点在于难以应对”新对象“的需求变动。
Abstract Factory模式经常和Factory Method模式共同组合来应对“对象创建”的需求变化
"系列对象"指的是这些对象之间有相互依赖、或作用的关系。例如游戏开发场景中的"道路"与"房屋"依赖,“道路”与“地道”的依赖。
Abstract Factory模式主要在于应对"新系列"的需求变动。其缺点在于难以应对”新对象“的需求变动。
Abstract Factory模式经常和Factory Method模式共同组合来应对“对象创建”的需求变化
阅读全文
0 0
- 来说说(AbstractFactory)静态工厂模式
- 来说说(SimpleFactory)简单工厂模式
- 抽象工厂模式(AbstractFactory)
- 设计模式系列 1——StaticFactory(静态工厂),AbstractFactory(抽象工厂)
- AbstractFactory Pattern(抽象工厂模式)
- 7、抽象工厂模式(AbstractFactory)
- AbstractFactory抽象工厂模式
- AbstractFactory抽象工厂模式
- AbstractFactory抽象工厂模式
- 抽象工厂模式 AbstractFactory
- 来说说(Memorandum)备忘录模式
- 来说说(Decorator)装饰者模式
- 来说说(Strategy)策略模式
- 来说说(Singleton)单例模式
- 来说说(Iterator)迭代器模式
- 抽象工厂(AbstractFactory)
- 抽象工厂模式(AbstractFactory)-设计模式(二)
- 设计模式的实现(C++)------抽象工厂模式(AbstractFactory)
- 解决:spring中普通类调用service
- ES6新数据类型 Symbol
- ORACLE 自增
- swagger的yaml编写规则
- 常用VIM命令
- 来说说(AbstractFactory)静态工厂模式
- OC项目框架目录
- linux修改hostname
- SourceTree 504 Gateway Timeout
- MySQL5.7 union的一个限制
- 自定义tababr,中间有圆角按钮突起
- Android中需要手动关闭的地方总结
- Arduino教程 RFID-RC522读IC卡门禁原理及破解防御
- 线程 上