个人不善于表达 思路见于代码 [欢迎大神拍砖批评指点]

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Reflection;namespace SelfToolsHelper
{public interface Ilog{void CreateLog();}public class EventLog : Ilog{public void CreateLog(){Console.Write("Create EventLog");}}public class TxtLog : Ilog{public void CreateLog(){Console.Write("createTxtLog");}}public class DiskLog : Ilog{public void CreateLog(){Console.Write("Create DiskLog");}}public interface IFactory{Ilog CreateLogFactory();}public class EventFactory : IFactory{public Ilog CreateLogFactory(){return new EventLog();}}public class TexFactory : IFactory{public Ilog CreateLogFactory(){return new TxtLog();}}public class DiskFactory : IFactory{public Ilog CreateLogFactory(){return new DiskLog();}}//思考 要是有1w个 log 那 我要建立两万个class (log and factory) ,多付出1w的工作量。//是否可以优化我的factory方法?public class FactoryNew<T>{public object CreateLogInstance(){return Activator.CreateInstance<T>();}}

public class FactoryTEST{public void TEST(){IFactory factory = new DiskFactory();Ilog log = factory.CreateLogFactory();log.CreateLog();//面向接口抽象,打印出:Create DiskLog
        }public void TestNew(){FactoryNew<EventLog> eventfact =new FactoryNew<EventLog> ();Ilog log = eventfact.CreateLogInstance() as EventLog;log.CreateLog();}public void TestNewSecond(){FactoryNew<DiskLog> diskFactory = new FactoryNew<DiskLog>();Ilog log = diskFactory.CreateLogInstance() as DiskLog;log.CreateLog();}//以上两个方法是在我知道 到底是使用哪种log方法的测试。、//现在我不知道我到底要实例化哪种log 而是读取配置文件 来动态创建 这样该怎么办?

//思路 我应该从配置文件里面知道我到底改实例一个什么泛型的工厂 就是说我应该传递什么类型进入 泛型工厂?// 假如 配置在了config文件中。//1<appSettings>//<add key="logtype" value="EventLog"></add>//</appSettings>public void TestNewThrid(){string strfactoryName = ConfigurationSettings.AppSettings["logtype"];#region 此部分是思考过程object o= Activator.CreateInstance(Assembly.GetCallingAssembly().FullName, strfactoryName);Type t = o.GetType();//得带log type。 然后根据logtype 再声明 facttorynew<T>;object obj =Assembly.Load(Assembly.GetCallingAssembly().FullName).CreateInstance(strfactoryName);//  FactoryNew < typeof(obj) > diskFactory = new FactoryNew< typeof(obj) >(); 走不通。// obj.调用方法。。。。。。。 失败了!//思考,我为什要先创建factory 再创建log?!!! 我的目的是创建Log 。额 log  log已经创建了。。。。// 这里才是真正实现,注意 配置config的时候直接使用 log Type!跳过FactoryIlog logObj = Assembly.Load(Assembly.GetCallingAssembly().FullName).CreateInstance(strfactoryName) as Ilog;logObj.CreateLog();//搞定。//#endregion}
}}

// 参考资料 http://terrylee.cnblogs.com/archive/2006/01/04/310716.html

2013年9月26日 14:25:51

转载于:https://www.cnblogs.com/cdemo/p/3340736.html

设计模式-工厂模式学习(初级)相关推荐

  1. 设计模式-工厂模式(学习)

    设计模式-工厂模式(学习) 在程序的世界里,就像射雕英雄传一样,我们的技能就像是武功一样,我们只有不断去学习练习才能有机会像郭靖一样成为"天下第一". 我认为技能和武功是很类似的, ...

  2. java设计模式工厂模式_Java中的工厂设计模式

    java设计模式工厂模式 Welcome to the Factory Design Pattern in Java tutorial. Factory Pattern is one of the C ...

  3. Python 设计模式 - 工厂模式

    精通Python设计模式第二版 第 1 章 工厂模式 学习笔记 工厂模式 工厂模式的思想意在简化对象的创建过程.调用者(客户端)不清楚对象的来源以及生成对象的方式,调用者只需要调用某个方法或者实例某个 ...

  4. Java设计模式-工厂模式(3)抽象工厂模式

    在Java设计模式-工厂模式(2)工厂方法模式 我们知道了工厂方法模式解决了简单工厂模式中的缺陷,做到了满足开闭原则,但是时代是进步的,进而又产生新的问题,工厂难道只能生产一种东西吗.我们所见到的工厂 ...

  5. Java设计模式-工厂模式(2)工厂方法模式

    在Java设计模式-工厂模式(1)简单工厂模式 中我们介绍了简单工厂模式,提到了简单工厂模式违背了开闭原则,而"工厂方法模式"是对简单工厂模式的进一步抽象化,其好处是可以使系统在不 ...

  6. Java设计模式-工厂模式(1)简单工厂模式

    Java设计模式-工厂模式(1)简单工厂模式 一.前言 1)例子 2)类图关系 3)代码实现 二.简单工厂模式 2.1.概述: 2.2.类图关系: 2.3.代码修改: 2.4.优缺点 2.5.扩展-简 ...

  7. 设计模式---工厂模式

    设计模式---工厂模式 工厂方法模式 概述:工厂方法模式中抽象工厂负责定义创建对象的接口,具体创建工作由继承抽象工厂的具体类实现. 优点:客户端不需要再负责对象的创建,从而明确了各个类的职责,如果有新 ...

  8. java设计模式工厂模式_Java中的复合设计模式

    java设计模式工厂模式 Composite pattern is one of the Structural design pattern. Composite design pattern is ...

  9. java设计模式工厂模式_Java中的桥梁设计模式

    java设计模式工厂模式 Today we will look into Bridge Design Pattern in java. When we have interface hierarchi ...

最新文章

  1. 搜索-----棋盘问题
  2. 华科计算机国家专项分数线,5所985高校中招,华科、中大被捡漏,专项计划录取异常,原因透析...
  3. Golang之pprof使用
  4. 实验13 简单FTP 程序设计
  5. 能pingt通外部的Ip和dns,但上不了网络
  6. android tv 帮助,android TV端各类焦点问题
  7. 苹果AirPods 2又有新消息了!具备防滑涂层和新配色
  8. 小米cc9出厂线刷包_小米CC9手机忘记密码一键刷机解锁 | 线刷宝刷机工具刷机包下载...
  9. 卖文玩微商怎么引流?在泛滥的人群中脱颖而出
  10. JDK7和JDK8的区别
  11. 服务器分辨率无法修改器,win10解决分辨率无法修改的方法攻略
  12. c语言课英语单词,课程英语单词大全:英语单词32个课程加翻译
  13. window用户切换
  14. 建模与仿真matlab论文,matlab+fluent等温容器建模与仿真研究
  15. jQuery实现简单分页
  16. D4.1 About an initiating master
  17. 将文件夹添加到Windows 7 Media Center中的影片库
  18. 手写PE结构解析工具
  19. P1000 超级玛丽游戏题解
  20. A Two-stage Unsupervised Approach for Low light Image Enhancement(一种两阶段无监督的微光图像增强方法)

热门文章

  1. 【剑指Offer】从尾到头打印链表
  2. 外卖(food) 洛谷4040宅男计划 三分套二分贪心
  3. 什么是数据结构,为什么我们需要数据结构?
  4. TensorFlow 学习(3)——MNIST机器学习入门
  5. 误操作数据库的一个方法
  6. IOS UIWebView用法
  7. Android中的主题Theme
  8. 【预言】分布式缓存成为操作系统的一部分
  9. hyper-v NAT网络
  10. 一文看懂https如何保证数据传输的安全性的