工厂模式之简单工厂

王朝学院·作者佚名  2016-05-17
窄屏简体版  字體: 小  |  中  |  大  |  超大  

工厂模式之简单工厂工厂模式定义:实例化对象,用工厂方法代替new操作。

接口(IBase):

public interface IBase{ void Excute();}

实现类A(BaseAImpl):

public class BaseAImpl : IBase{ public void Excute() { Type type = this.GetType(); Console.WriteLine("类全A名称:{0},类名:{1},是否实现接口IBase:{2}", type.FullName, type.Name, typeof(IBase).IsAssignableFrom(type)); }}

实现类B(BaseBImpl):

public class BaseBImpl : IBase{ public void Excute() { Type type = this.GetType(); Console.WriteLine("类B全名称:{0},类名:{1},是否实现接口IBase:{2}", type.FullName, type.Name, typeof(IBase).IsAssignableFrom(type)); }}

类C(BaseC):(特殊类,用于区别)

public class BaseC { public void Excute() { Type type = this.GetType(); Console.WriteLine("类全A名称:{0},类名:{1},是否实现接口IBase:{2}", type.FullName, type.Name, typeof(IBase).IsAssignableFrom(type)); }}

工厂类(Factory):

/// <summary>/// 工厂类/// </summary>public class Factory{ /// <summary> /// 工厂方法(创建实例的地方,需要什么拿什么) /// </summary> /// <param name="fullName">类型全名称</param> /// <returns>实现IBase的实例对象</returns> public IBase CreateBase(string fullName) { // 获取程序集里面的所有类型 Type[] types = this.GetType().Assembly.GetTypes(); // 遍历所有类型,查找 foreach (Type type in types) { // 判断类型全名称和是否实现IBase接口 if (type.FullName == fullName && typeof(IBase).IsAssignableFrom(type)) return Activator.CreateInstance(type) as IBase; } return null; }}

演示结果:

class PRogram{ static void Main(string[] args) { Factory factory = new Factory(); IBase instanceA= factory.CreateBase(typeof(BaseAImpl).FullName); IBase instanceB = factory.CreateBase(typeof(BaseBImpl).FullName); IBase instanceC = factory.CreateBase(typeof(BaseC).FullName); // 特殊例子,用于区别 instanceA.Excute(); instanceB.Excute(); if (instanceC == null) { Console.WriteLine("类C:{0}未实现接口IBase", typeof(BaseC).FullName); } Console.ReadLine(); }}

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航