使用Activator.CreateInstance完善简单工厂
来源:互联网 发布:matlab 2016b mac安装 编辑:程序博客网 时间:2024/06/08 08:14
前几天在项目中看到别人的工厂类使用Activator.CreateInstance() 之前用简单工厂都是用switch ...case ,之前没有用过便查了查资料,正是这个方法+ 反射简化了工厂模式,在需求增加的情况可以不动工厂类和客户端, 也符合开放封闭原则。 反射的地方用的不多, 后续会再加上一些例子。
- public interface IFruit
- {
- }
- public class Apple:IFruit
- {
- public Apple()
- {
- Console.WriteLine("An apple is got!");
- }
- }
- public class Orange:IFruit
- {
- public Orange()
- {
- Console.WriteLine("An orange is get!");
- }
- }
- public class FruitFactory
- {
- public IFruit MakeFruit(String name)
- {
- ////switch (name)
- ////{
- //// case "Orange":
- //// return new Orange();
- //// break;
- //// case "Apple":
- //// return new Apple();
- //// break;
- //// default:
- //// return null;
- ////}
- IFruit MyFruit = null;
- try
- {
- var assembly = Assembly.GetExecutingAssembly();
- var types = assembly.GetTypes();
- foreach (var type in types)
- {
- if (type.Name == name)
- {
- Type t = Type.GetType(type.ToString());
- MyFruit =Activator.CreateInstance(t) as IFruit;
- }
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- }
- return MyFruit;
- }
- }
- }
- -----------------------------------------
- class Program
- {
- static void Main(string[] args)
- {
- String fruitName = Console.ReadLine();
- Console.WriteLine("you need to get {0}", fruitName);
- IFruit fruit = null;
- FruitFactory factory = new FruitFactory();
- fruit = factory.MakeFruit(fruitName);
- Console.Read();
- }
- }
0 0
- 使用Activator.CreateInstance完善简单工厂
- 使用Activator.CreateInstance完善简单工厂
- C# Activator.CreateInstance()方法使用
- C# Activator.CreateInstance()方法使用
- Activator.CreateInstance使用中的参数传入
- Use System.Activator.CreateInstance
- Activator.CreateInstance(T) 方法
- 代替Activator.CreateInstance
- Activator.CreateInstance(T) 方法
- C# Activator.CreateInstance()方法
- Activator.CreateInstance 方法
- 用Activator .CreateInstance
- 【C#】Activator.CreateInstance用法
- Assembly.CreateInstance()与Activator.CreateInstance()方法
- Assembly.CreateInstance()与Activator.CreateInstanc
- C#的Activator.CreateInstance方法
- Assembly.LoadFrom和Activator.CreateInstance
- Assembly.CreateInstance()与Activator.CreateInstanc
- 函数第一节
- Ubuntu 14.04搭建Android5.1开发环境和编译
- 'NSURL' is not implicitly convertible to 'URL'; did you mean to use 'as' to explicitly convert?异常
- 百度地图api 实例 整个自动提示 并计算两地的行驶距离
- Codevs1531 山峰 单调栈
- 使用Activator.CreateInstance完善简单工厂
- linux下ping域名的时候出现ping:unknown host xxx.xxx
- 在安卓工程使用JDK8
- JavaScript中表示空的undefined与null的区别及用法
- Android中利用C++处理Bitmap对象
- 【微信小程序开发•系列文章六】生命周期和路由
- 怎么解决Qt5中文显示乱码问题
- JAD反编译详细介绍
- groovy : poi 读取 Excel xlsx