利用配置文件解耦工厂类型
2013-03-28 13:10
323 查看
定义一个接口
获取配置类
工厂
page 84,只为自己阅读,复习
如果批量生产的话
public interface IFactory { IProduct Create(); // 返回默认的 concrete product IProduct Create(string name); // 按照配置的逻辑名称返回指定的concrete product }
获取配置类
public class ProductRegistry { const string SectionName = "concreteProducts"; static NameValueCollection collection = (NameValueCollection)ConfigurationManager.GetSection(SectionName); public Type this[string name] { get { return Type.GetType(collection[name]); } } }
工厂
public class Factory : IFactory { public const string DefaultName = "DEFAULT"; public readonly ProductRegistry productRegistry = new ProductRegistry(); #region IFactory Members public IProduct Create() { return (IProduct)Activator.CreateInstance(productRegistry[DefaultName]); } public IProduct Create(string name) { if (string.IsNullOrEmpty(name)) throw new ArgumentNullException("name"); return (IProduct)Activator.CreateInstance(productRegistry[name]); } #endregion }
page 84,只为自己阅读,复习
如果批量生产的话
public interface IBatchFactory : IFactory { IEnumerable<IProduct> Create(string name, int quantity); IEnumerable<IProduct> Create(int quantity); }
public class BatchFactory : Factory, IBatchFactory { #region IBatchFactory Members /// <summary> /// batch create /// </summary> /// <param name="quantity"></param> /// <returns></returns> public IEnumerable<IProduct> Create(int quantity) { if (quantity <= 0) throw new IndexOutOfRangeException("quantity"); return InternalCreate<IProduct>(productRegistry[DefaultName], quantity); } /// <summary> /// batch create /// </summary> /// <param name="name"></param> /// <param name="quantity"></param> /// <returns></returns> public IEnumerable<IProduct> Create(string name, int quantity) { if (string.IsNullOrEmpty(name)) throw new ArgumentNullException("name"); return InternalCreate<IProduct>(productRegistry[name], quantity); } /// <summary> /// Helper method /// </summary> /// <typeparam name="T"></typeparam> /// <param name="type"></param> /// <param name="quantity"></param> /// <returns></returns> IEnumerable<T> InternalCreate<T>(Type type, int quantity) { if (quantity <= 0) throw new IndexOutOfRangeException("quantity"); if (type == null) throw new ArgumentNullException("type"); IList<T> result = new List<T>(); for (int i = 0; i < quantity; i++) result.Add((T)Activator.CreateInstance(type)); return result; } #endregion }
相关文章推荐
- 利用Swing修改xml类型的配置文件的
- C# 静态工厂利用反射机制动态构建配置文件中 所配置的类的对象
- 【JDBC】JdbcUtil类加载器加载配置文件,statement.setDate、resultSet.getString("id")、单例工厂设计解耦
- 利用java反射机制 读取配置文件 实现动态类载入以及动态类型转换
- 利用java反射机制 读取配置文件 实现动态类加载以及动态类型转换
- 利用java反射机制 读取配置文件 实现动态类加载以及动态类型转换
- 利用GetPrivateProfileString读取配置文件(.ini)
- [置顶] spring mvc 利用maven实现不同环境使用不同配置文件
- hibernate配置文件实体类,对应表中字段类型错误
- ELK日志平台----解耦配置文件
- Hibernate配置文件中数据类型date与timestamp区别
- 配置文件强类型详细解析
- 利用SOLR搭建企业搜索平台 之三(配置文件)
- 利用ALSA插件将5.1通道音频通过2通道立体声卡播放的配置(.asoundrc配置文件)
- 根文件系统制作、NFS配置与安装及利用NFS挂载根文件系统
- 利用apktool将APK反编译,生成程序的图片、XML配置、语言资源等文件
- 【摘录】ubuntu利用.bin文件安装并配置jdk
- 利用 IBM Rational Asset Manager Configurator 来配置 UML 模型概要文件
- windows下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件
- Java中工厂、配置文件和反射学习