用反射技术替换工厂种的switch分支(14)
首先给大家拜个晚年,祝大家新春快乐,万事如意,鸡年大吉。
好了,前面我们讲了很多的工厂模式,其中,有个很明显的特点,工厂中,有一个方法,里面有很多的swich case 分支,我们前面说过,我们可以用反射的技术来避免swich case 分支。ok,那么,今天,我们来用反射+抽象工厂模式 来完善一下 抽象工厂模式
首先,给大家复习一下,什么是反射: Assembly.Load("程序集名称").CreateInstance("命名空间.类名"); 这是它的语法。需要using System.Reflection;
之前我们的写法是 IUser result = new SqlserverUser();
我们用反射就可以 IUser result=(IUser)Assembly.Load("程序集名称").CreateInstance("命名空间.类名"); 这是它的语法。需要using System.Reflection;
实际效果是一样的,但这两种写法有什么区别吗?
同样是实例化 SqlserverUser 类,这两种写法的区别就是,用反射写,SqlserverUser 类 是当作字符串变量出现在语句中的,这样,对于一个字符串来说,那就非常灵活了。这就相当于是一个写死在程序里,一个当作变量出现在程序里 一样,哪个更加灵活不言而喻了。
那这样,我们就可以将数据库操作封装成dll文件,然后通过配置文件,让程序灵活加载dll,这样,这个程序就活起来了。
灵活的运用反射+工厂类设计模式,就可以让整个程序更易于扩展。 一个好的设计,可以省却大量的时间,这样,程序员也就不用天天加班加点的改代码了。
关于更详细的 反射 技术, 配置文件 技术,园友们可以阅读一下其他大神的文章,在此不做详细讲解,有时间的话我会开辟新的专栏,专门讲解基础知识。
好了,今天先到此了,下一篇会讲 状态模式
本系列将持续更新,喜欢的小伙伴可以点一下关注和推荐,谢谢大家的支持。
用反射技术替换工厂种的switch分支(14)的更多相关文章
- C#反射技术概念作用和要点
反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等.还可以获得每个成员的 ...
- C# 反射技术应用
反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等.还可以获得每个成员的 ...
- JAVA:将反射技术应用于工厂模式(Factory)和单例模式(Singleton)的简单代码
反射技术大量用于Java设计模式和框架技术,最常见的设计模式就是工厂模式(Factory)和单例模式(Singleton). 参考URL: http://blog.csdn.net/xiaohai79 ...
- [.net 面向对象程序设计进阶] (20) 反射(Reflection)(上)利用反射技术实现动态编程
[.net 面向对象程序设计进阶] (20) 反射(Reflection)(上)利用反射技术实现动态编程 本节导读:本节主要介绍什么是.NET反射特性,.NET反射能为我们做些什么,最后介绍几种常用的 ...
- CASE函数 sql server——分组查询(方法和思想) ref和out 一般处理程序结合反射技术统一执行客户端请求 遍历查询结果集,update数据 HBuilder设置APP状态栏
CASE函数 作用: 可以将查询结果集的某一列的字段值进行替换 它可以生成一个新列 相当于switch...case和 if..else 使用语法: case 表达式/字段 when 值 then ...
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
原文出处:博主宇宙的极客http://www.cnblogs.com/nokiaguy/archive/2010/07/27/1786482.html 众所周知,AlertDialog类用于显示对话框 ...
- Java反射机制与工厂模式
工厂模式属于创建型模式,它提供了一种创建对象的最佳方式. 它的特点是:客户端的程序类不直接牵扯到对象的实例化管理,只与接口发生关联,通过工厂类获取指定接口的实例化对象. 简单工厂模式如下: inter ...
- Java中类加载和反射技术实例
我们知道一个对象在运行时有两种类型,一个是编译类型,一个是运行时类型.在程序运行时,往往是需要发现类和对象的真实的信息的.那么如何获的这种信息呢? 其一,如果我们在编译和运行时都知道类型的具体信息,这 ...
- 程序集与反射技术(C#)
首先我们来看程序集,程序集是代码进行编译是的一个逻辑单元,把相关的代码和类型进行组合,然后生成PE文件(例如可执行文件.exe和类库文件.dll).由于程序集在编译后并不一定会生成单个文件,而可能会生 ...
随机推荐
- Hadoop MapReduce开发最佳实践(上篇)
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
- FTP服务器中vsftpd主配置文件解析
/etc/vsftpd/vsftpd.conf#################匿名权限控制############### anonymous_enable=YES #是否启用匿名用户no_anon_ ...
- selenium IE 浏览器驱动下载地方
download: http://selenium-release.storage.googleapis.com/index.html
- php 模式
设计模式1.单例模式类的计划生育1.让该类在外界无法造对象2.让外界可以造一个对象,做一个静态方法返回对象3.在类里面通过静态变量控 class Dog { static $dx; public $t ...
- js动画学习笔记
<html> <head> <meta charest="utf-8"> <title>test</title> < ...
- problem 202,263、232、21、231
[263]Ugly Number Write a program to check whether a given number is an ugly number. Ugly numbers are ...
- 一个异步任务接收两个url下载两个图片
有两个url,一个是下载用户头像的url,一个是下载用户上传图片的url,想要用一个异步任务同时下载这两个图片. 程序的下载任务是这么执行的,先接受url参数,然后调用 imgUrls = infoP ...
- datalog
https://en.wikipedia.org/wiki/Datalog http://www.csd.uoc.gr/~hy562/1112_spring/instr_material/WhatYo ...
- Nodejs之目录介绍及app.js说明
nodejs目录说明,app.js简单介绍及如何设置app.js启动项目. 新建的项目结构应该是这样 bin:项目的启动文件,也可以放其他脚本. node_modules:用来存放项目的依赖库. pu ...
- linux内核设计与实现笔记 进程调度
转载:http://blog.chinaunix.net/uid-24919665-id-3013590.html