工廠模式定義:實例化對象,用工廠方法代替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(); }}
新聞熱點
疑難解答