首页 > 代码库 > 简单工厂
简单工厂
简单工厂 : 和享元模式一样都属于建造类模式,用于创建对象,被建造的所有的实例都有一个共同的父类。和享元模式不同的是:工厂每一个对象都是new出来的,都是不同的对象。而享元模式除了第一次new一个实例对象,其他都是用的此实例对象的缓存,属于同一个对象。
现在,本人以花为例( 可以假设Game中有撒各种花的需求,比如有玩家结婚了满屏撒红花特效 ; 母亲节送礼满屏撒百合花 --- 本人对花的意义的理解不是特别理解,不喜勿喷,只是作为例子来讲解简单工厂模式 ),让我们开始吧 ---
一 , 简单工厂中所有被创建的实例都需要有一个共同的父类 ( 普通类 , 抽象类 , 虚拟类 , 接口 ) , 这篇我以接口为例:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SimpleFactory.com { /// <summary> /// 花类的继承接口 /// </summary> public interface IFlower { void Show(); } }
二 ,创建2个子类 : ①RoseFlower(玫瑰) ; ②LilyFlower(百合) , 代码基本一样,我只给出 RoseFlower 代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SimpleFactory.com { /// <summary> /// 玫瑰特效 /// </summary> public sealed class RoseFlower : IFlower { public RoseFlower() { Console.WriteLine("实例化玫瑰"); } public void Show() { Console.WriteLine("展示玫瑰花特效!"); } } }
三 , 创建一个工厂类用于生产各种花( 玫瑰 , 百合 ) 重点:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Reflection; using System.Text; namespace SimpleFactory.com { /// <summary> /// 花工厂 /// </summary> public static class FlowersFactory { public static IFlower GetFlower( FlowerType flower ) { switch (flower) { case FlowerType.Rose: return new RoseFlower(); break; case FlowerType.Lily: return new LilyFlower(); break; default: return null; break; } } public enum FlowerType : int { [Description("玫瑰")] Rose = 0, [Description("百合")] Lily = 1 } /// <summary> /// 获取描述信息 /// </summary> /// <param name="en"></param> /// <returns></returns> public static string description(this Enum en) { Type type = en.GetType(); MemberInfo[] memInfo = type.GetMember(en.ToString()); if (memInfo != null && memInfo.Length > 0) { object[] attrs = memInfo[0].GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute), false); if (attrs != null && attrs.Length > 0) return ((DescriptionAttribute)attrs[0]).Description; } return en.ToString(); } } }
其中 GetFlower方法为重点 , 其他为本人扩展 。 在此方法中,根据不同的花( FlowerType )返回不同的实例对象( 多态 )。
测试 :
using System; using System.Collections.Generic; using System.Linq; using System.Text; using SimpleFactory.com; namespace SimpleFactory { class Program { static void Main(string[] args) { //获得玫瑰 IFlower rose1 = FlowersFactory.GetFlower(FlowersFactory.FlowerType.Rose); rose1.Show(); IFlower rose2 = FlowersFactory.GetFlower(FlowersFactory.FlowerType.Rose); rose2.Show(); Console.Read(); } } }
结果如下:
本文出自 “Better_Power_Wisdom” 博客,请务必保留此出处http://aonaufly.blog.51cto.com/3554853/1941666
简单工厂
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。