博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
工厂模式的一些个人改进if else
阅读量:4968 次
发布时间:2019-06-12

本文共 2989 字,大约阅读时间需要 9 分钟。

关于设计模式,园子有太多的介绍了,我就不去摆文弄墨了。

关于工厂模式,算是最简单,最好理解的设计模式了,当然,可能是最多的设计模式了。我这里说的并不是这个模式的用法,或者见解,这是个人对于这个模式的一些用法的改进而已。

好了,入正题。想必,可能大多数人写工厂模式的代码都是如此。但是,如果再增加一个IPlant的类,就必须地增加if条件判断。对于我这种对代码有洁癖的人,实在受不了。

namespace FactoryMode{    class Program    {        static void Main(string[] args)        {            var plant = PlantFactory.GetPlant("Jd");        }    }    public interface IPlant    {        void DownLoad();        void SendBackMsg();    }    public class PlantFactory    {        public static IPlant GetPlant(string plantName)        {            if (plantName == "Jd")                return new JdPlant();            if (plantName == "Tb")                return new TbPlant();            else                return null;        }    }    public class JdPlant : IPlant    {        public void DownLoad()        {            Console.WriteLine("Jd_DownLoad");            //throw new NotImplementedException();        }        public void SendBackMsg()        {            Console.WriteLine("Jd_SendBackMsg");            //throw new NotImplementedException();        }    }    public class TbPlant : IPlant    {        public void DownLoad()        {            Console.WriteLine("Tb_DownLoad");            //throw new NotImplementedException();        }        public void SendBackMsg()        {            Console.WriteLine("Tb_SendBackMsg");            //throw new NotImplementedException();        }    }} 改进后的代码:
namespace FactoryMode{    class Program    {        static void Main(string[] args)        {            var plant = PlantFactory.GetPlant("Jd");        }    }    public interface IPlant    {        void DownLoad();        void SendBackMsg();    }    public class PlantFactory    {        private static Dictionary
plantDictionary = new Dictionary
(); public PlantFactory() { plantDictionary.Add("Jd", typeof(JdPlant)); plantDictionary.Add("Tb", typeof(TbPlant)); } public static IPlant GetPlant(string plantName) { IPlant plant = null; if (plantDictionary.Keys.Contains(plantName)) { plant = (IPlant)Activator.CreateInstance(plantDictionary[plantName]); } return plant; } } public class JdPlant : IPlant { public void DownLoad() { Console.WriteLine("Jd_DownLoad"); //throw new NotImplementedException(); } public void SendBackMsg() { Console.WriteLine("Jd_SendBackMsg"); //throw new NotImplementedException(); } } public class TbPlant : IPlant { public void DownLoad() { Console.WriteLine("Tb_DownLoad"); //throw new NotImplementedException(); } public void SendBackMsg() { Console.WriteLine("Tb_SendBackMsg"); //throw new NotImplementedException(); } }}
 

 

 

 

转载于:https://www.cnblogs.com/j03106/p/6489884.html

你可能感兴趣的文章
Python 文件处理
查看>>
邻接表详解
查看>>
服务器一:分布式服务器结构
查看>>
迭代dict的value
查看>>
eclipse package,source folder,folder区别及相互转换
查看>>
Py 可能是最全面的 python 字符串拼接总结(带注释版)
查看>>
(转载)博弈汇总【巴什博奕,威佐夫博弈,尼姆博弈,斐波那契博弈】
查看>>
《Java程序设计实验》 软件工程18-1,3 OO实验2
查看>>
【Herding HDU - 4709 】【数学(利用叉乘计算三角形面积)】
查看>>
【7-9 有重复的数据I (20 分)】【此题卡输入,需要自己写个输入挂】
查看>>
JRebel安装部署,激活
查看>>
OPENSSL使用方法
查看>>
下载GO的开源开发工具LITEIDE
查看>>
接口操作XML
查看>>
idhttp访问DATASNAP有密码验证的中间件
查看>>
libmidas.so.2
查看>>
开发WINDOWS服务程序
查看>>
httpencode编码
查看>>
cross socket和msgpack的数据序列和还原
查看>>
解决跨操作系统平台JSON中文乱码问题
查看>>