设计模式--简单工厂
来源:互联网 发布:搜索文件软件 编辑:程序博客网 时间:2024/06/11 21:28
简单的说,就是通过工厂创建对象,然后客户端进行调用
1.声明接口
namespace ConsoleApplication1{ public interface IRace { void ShowKing(); }}
2.实现接口
namespace ConsoleApplication1{ public class Human : IRace { public void ShowKing() { Console.WriteLine(" this is Human ShowKing"); } }}
namespace ConsoleApplication1{ public class NE : IRace { public void ShowKing() { Console.WriteLine(" this is NE ShowKing"); } }}
namespace ConsoleApplication1{ public class Orc : IRace { public void ShowKing() { Console.WriteLine(" this is Orc ShowKing"); } }}
3.Factory ,三种创建对象的方式
namespace ConsoleApplication1{ public class Factory { /// <summary> /// 第一种创建 /// </summary> /// <param name="raceType"></param> /// <returns></returns> public static IRace CreateInstance(RaceType raceType) { switch (raceType) { case RaceType.Human: return new Human(); case RaceType.OrC: return new Orc(); case RaceType.NE: return new NE(); default: throw new Exception("创建失败!"); } } private static string RaceTypeConfig = System.Configuration.ConfigurationManager.AppSettings["RaceTypeConfig"]; /// <summary> /// 第二种通过配置文件创建实例 /// </summary> /// <param name="raceType"></param> /// <returns></returns> public static IRace CreateInstanceConfig() { RaceType raceType = (RaceType)Enum.Parse(typeof(RaceType), RaceTypeConfig); switch (raceType) { case RaceType.Human: return new Human(); case RaceType.OrC: return new Orc(); case RaceType.NE: return new NE(); default: throw new Exception("创建失败!"); } } private static string RaceTypeReflect = System.Configuration.ConfigurationManager.AppSettings["RaceTypeReflect"]; /// <summary> /// 第三种通过反射创建实例,可扩展性极强 /// </summary> /// <param name="raceType"></param> /// <returns></returns> public static IRace CreateInstanceReflect() { string assemblyName = RaceTypeReflect.Split(',')[0]; string typeName = RaceTypeReflect.Split(',')[1]; return (IRace)Activator.CreateInstance(assemblyName, typeName).Unwrap(); } } public enum RaceType { Human, OrC, NE }}
4.App.config
<?xml version="1.0" encoding="utf-8" ?><configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> </startup> <appSettings> <!--靠配置文件改变生成的类 value 的值是具体的类 --> <add key="RaceTypeConfig" value="Human"/> <!--靠反射生成的对应的类 value 的值是具体的类 --> <!--<add key="RaceTypeReflect" value="ConsoleApplication1,ConsoleApplication1.NE"/>--> <!--靠反射生成的对应的类 value 的值是具体的类 --> <add key="RaceTypeReflect" value="TheFive,TheFive.Five"/> </appSettings></configuration>
5.client 调用
public class Program { static void Main(string[] args) { IRace irace1 = Factory.CreateInstance(RaceType.Human); irace1.ShowKing(); IRace irace2 = Factory.CreateInstance(RaceType.OrC); irace2.ShowKing(); IRace irace3 = Factory.CreateInstance(RaceType.NE); irace3.ShowKing(); Console.WriteLine("***********CreateInstanceConfig******************"); IRace irace4 = Factory.CreateInstanceConfig(); irace4.ShowKing(); Console.WriteLine("***********CreateInstanceReflect******************"); IRace irace5 = Factory.CreateInstanceReflect(); irace5.ShowKing(); Console.ReadKey(); }
阅读全文
0 0
- 简单工厂设计模式
- 设计模式-----简单工厂
- 简单工厂设计模式
- 设计模式:简单工厂
- 设计模式 - 简单工厂
- 设计模式 简单工厂
- 【设计模式】【简单工厂】
- 简单工厂设计模式
- 简单工厂设计模式
- 设计模式--简单工厂
- 简单工厂设计模式
- 简单工厂设计模式
- 设计模式------------简单工厂
- 设计模式--简单工厂
- 简单工厂设计模式
- 设计模式---------简单工厂
- 设计模式--简单工厂
- 简单工厂设计模式
- vue学习-过滤器
- input file图片上传并回显
- 如何在VS2013+QT5.3环境下使用自定义信号与槽函数
- 个人总结42
- 链队列(C语言实现)学习记录
- 设计模式--简单工厂
- H5+JS+相对单位rem实现第三方支付页(输入金额+模拟数字键盘+自适应布局+大写金额)
- 最大子段-n个数求和最大且连续的子段-最简单的一维dp,动态规划入门教程,包听懂
- Headfile !头文件的原理与实践编写。 摘自外网 -learn.cpp.com
- C#语言的正则表达式(Regex)详解
- 文章标题
- 第一次写博文
- 数据结构与算法 学习摘要
- 博客小程序