首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

设计形式初探(二)——既然创建时必然的,所以它独立了

2013-01-09 
设计模式初探(二)——既然创建时必然的,所以它独立了!面向对象设计,一个必不可少的步骤是“实例化”,如果将实

设计模式初探(二)——既然创建时必然的,所以它独立了!

        面向对象设计,一个必不可少的步骤是“实例化”,如果将实例化与具体的实现紧密地结合在一起……简单的创建,当然这是没有问题的,但是,如果我们不是简单的创建呢,我们需要改变具体的算法,需要扩展算法的种类,需要系统在改变之后还是以前的样子运行!那么,问题就会变得复杂,多变!

        在创建型的几个设计模式中,将具体算法的实现与实例化分离,工厂方法是这方面的典范,其他的创建型设计模式起到扩展和辅助的作用!

 

设计形式初探(二)——既然创建时必然的,所以它独立了

 

        在书中举得那些例子,都很有趣,大家可以好好看看,在这里咱们说说一些扩展的知识。

 

        反射:我个人肤浅的理解是,应用程序在运行时,可以动态地获得一个类型的属性,方法,事件等信息,这样就可以在工厂中动态地创建一个对象了!

 

        c#代码:

Assembly.Load("程序集") //Assembly.LoadFile("外部调用的动态库")加载程序集,返回类型是一个Assembly

 

        实际应用:

 

 

//引入反射using System.Reflection;//引入config配置文件using System.Configuration ;  //反射优化抽象工厂    //根据配置文件选择创建查询方式    class DateAccess    {        private static readonly string AssemblyName = "shujuku";        //利用配置文件:1,添加引用system.configuration ; 2, using system.configuration         //读取配置文件app.config里的DB        private static readonly string db = ConfigurationManager.AppSettings["DB"];        //private static readonly string db = "Sqlserver";        //静态函数创建用户表        public static IUser CreateUser()        {            string classname = AssemblyName + "." + db + "User";//利用反射创建对象            return (IUser)Assembly.Load(AssemblyName).CreateInstance(classname);        }        //静态函数创建表        public static IDepartment  CreateDepartment()        {            string classname = AssemblyName + "." + db + "Department";//利用反射创建对象            return (IDepartment )Assembly.Load(AssemblyName).CreateInstance(classname);        }    }

 

 

        在程序设计中,创建型模式已经给我们带来了意想不到的好处,让我们的工作更轻松,简单,但是不要忘了一种模式只是解决一种特定的问题,下次我们将介绍更多的模式,解决更多的问题!

热点排行