设计模式 学习笔记(7) 抽象工厂模式、状态模式
(15)抽象工厂模式
抽象工厂模式(Abstract Factory)提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
反射技术,.net引用命名空间using System.Reflection,可以帮助我们客服抽象工厂模式的先天不足。
Assembly.load("程序集名称").CreateInstance("命名空间.类名称")
//常规的写法 IUser result=new SqlserverUser();
//反射的写法 using System.Reflection; IUser result=(IUser)Assembly.Load(“当前'程序集'的名称”)。createInstance("当前'命名空间'名称.要实例化的类名");
利用反射技术,将程序由编译时转为运行时。由于'CreateInstance("抽象工厂模式.SqlserverUser")'中的字符串是可以写成变量的,可以由这个变量具体值由SQLServer还是Access来决定。
1 using System.Reflection; //引入反射 2 class DataAccess 3 { 4 private static readonly string AssemblyName="程序集名称"; 5 private static readonly string db="数据集名称"; 6 7 public static IUser CreateUser() 8 { 9 string className=AssemblyName+"."+db+"User"; 10 return (IUser)Assembly.Load(AssemblyName).CreateInstance(className); 11 } 12 13 public static IDepartment CreateDepartment() 14 { 15 string className=AssemblyName+"."+db+"Department"; 16 return (IDepartment)Assembly.Load(AssemblyName).CreateInstance(className); 17 } 18 }
(16)状态模式