反射的简单应用
- 格式:doc
- 大小:35.50 KB
- 文档页数:8
平面镜反射的原理引言光学是一门研究光的传播和相互作用的学科,而平面镜反射则是光学中的一个基本概念。
平面镜反射是我们日常生活中常见而又常用的现象,例如我们使用镜子照看自己的形象,或者在交通规则中使用车后视镜观察后方车辆。
本文将深入探讨平面镜反射的原理,以及它在光学中的一些应用。
一、光的传播和反射光可以被视为一种电磁波,具有波粒二象性。
在光的传播中,光可以直线传播,这就是光的直线传播定律。
当光线碰到物体表面时,一部分光会被物体吸收,被吸收的光能量转化为其他形式的能量;另一部分光会发生反射,即从物体表面弹回。
平面镜反射就是光线从物体表面弹回的一种特殊情况。
二、平面镜反射的特点平面镜反射具有以下特点:1. 反射角等于入射角:入射角是指入射光线与法线之间的夹角,而反射角是指反射光线与法线之间的夹角。
实验证明,无论入射角的大小如何,反射角始终等于入射角。
2. 反射光线与入射光线在同一平面内:当光线从平面镜反射时,反射光线和入射光线在同一平面上。
3. 入射角与反射角的方向相反:无论入射光线所在的位置如何,反射光线总是朝着与入射光线相反的方向被反射。
三、平面镜反射的示意图为了更好地理解平面镜反射的原理,可以通过以下的示意图来说明。
设想在一个简单的实验室中有一面平面镜,入射光线从左边射向平面镜。
在平面镜反射的示意图中,我们可以看到光线从入射垂直方向射到平面镜上后,经过反射之后向右移动。
通过画出光线的入射角、反射角、法线和光线的方向,可以更加直观地理解平面镜反射的原理。
四、平面镜反射的应用平面镜反射在日常生活和科技领域中有着广泛的应用。
以下是几个常见的应用范例:1. 镜子和反射器:镜子是光的反射器,将光线经过平面镜反射后形成我们所见的图像。
通过调整镜子的角度,我们可以改变图像的大小和位置。
2. 光学仪器:在光学仪器中,例如显微镜和望远镜,平面镜反射被用来引导光线,使其经过适当的路径到达观察者的眼睛。
光线的反射和折射通过精确设计的金属和玻璃镜质量,使得观察者能够看到更清晰的图像。
经典条件反射应用举例经典条件反射,听上去高深莫测,其实它在咱们的日常生活中无处不在。
想象一下,每当你听到开门声,心里就忍不住咕哝“回家了,终于回家了!”这就是经典条件反射的典型案例,跟狗狗听到铃铛声流口水有得一拼。
这背后的原理简单得不能再简单。
想象一下你是一个喜欢吃零食的人,每次吃零食的时候都在沙发上看你最爱的电视剧,随着时间的推移,每当电视一开,你的脑袋里就会不由自主地想起那些美味的零食,口水直流。
这就像是大脑跟你开了个玩笑,习惯成自然,一点都不难理解。
再来聊聊孩子们。
想象一下小朋友,妈妈一喊“吃饭了”,他们的脸上立刻绽放出笑容,眼睛都在闪闪发光。
这时候,孩子们脑海中浮现的不仅是饭菜的香味,还有妈妈那张慈爱的脸。
其实这也是经典条件反射的体现。
妈妈的声音成了“饭菜”的代名词,每次一听到,孩子们心里就像是装了个小火箭,立马飞向餐桌。
要是你在旁边看着,简直能把这幅画面笑得不行。
你知道吗?这些小家伙的心灵深处,早就把妈妈的声音和美味的食物紧紧联系在一起了。
还有很多人上班的路上,耳边总是萦绕着某首歌,听得久了,甚至一到办公室就像自动启动的机器,立刻进入工作状态。
那感觉就像被潜意识“催眠”,一听到那旋律,精神立马抖擞,工作效率直线上升。
这就是经典条件反射的魅力所在,真的可以把人带入一种“工作模式”。
你知道吗?有时候我在想,要是能把这些条件反射用在学习上,那简直是学霸的秘密武器啊!再说说我们每天早上喝咖啡的情景。
你可曾注意过,早晨一闻到咖啡的香气,脑海中就会立刻浮现出美好的开始。
就好像咖啡成了你一天活力的启动器。
每当你慢慢品味那一口浓香,身体里都像打了一针兴奋剂,瞬间就能干劲满满。
这种感觉,简直比闹钟响都管用。
而这,正是经典条件反射的作用,习惯让一切变得简单。
在宠物的世界里,经典条件反射同样发挥着巨大作用。
想想你家那只调皮的猫咪,每次你摇晃零食袋,它瞬间就像听到号令的小士兵,立刻跑过来,眼神里满是期待。
这小家伙已经将摇晃声音和美味食物紧密相连。
光学中的反射和折射定律的物理解释光学是研究光的性质和现象的学科,是自然科学中的一个分支。
反射和折射是我们生活中非常常见的现象,如我们看到镜面上的自己,以及通过玻璃看到室内外景象等。
在光学中,我们可以通过反射和折射定律对这些现象进行科学的解释。
一、反射定律反射是光线从一种介质向另一种介质传播时,遇到边界面产生的现象。
反射定律可以被简单地描述为:入射角等于反射角,即入射光线和反射光线沿同一条平面(法线)反射。
这个定律的物理解释非常简单,可以通过光线在边界面上的反弹来解释。
当入射光线照射到边界面时,它会被分为两个部分,一个部分将沿反射角反射回来,另一个部分则会穿过介质继续传播。
反射定律的应用范围非常广泛,如光学仪器中的镜子、反射式望远镜、反光镜等,以及生活中常见的灯光反射和汽车车灯反射等。
二、折射定律折射是光线从一种介质向另一种介质传播时,由于两种介质折射率不同,导致光线方向发生变化的现象。
折射定律可以被简单地描述为:入射角、反射角、折射角三者在同一平面内,且入射角与折射角之比等于两种介质的折射率之比。
折射定律的物理解释与反射定律类似,也是通过光线在边界面上的反射和折射来解释。
当入射光线从一种介质射入另一种介质中时,它的方向就会发生变化。
这个变化的程度与两种介质的折射率有关,折射率越大,光线偏向的角度越小。
折射定律的应用非常广泛,如生活中常见的光的折射和玻璃球折射、水面折射等。
三、光在介质中传播的速度在介质中,光的速度是不同的。
光速与介质的折射率有关,折射率越大,光速就越小。
折射率的定义是介质中的光速与真空中光速的比值。
光在介质中的速度变化会导致光线的弯曲和偏向,这就是光的折射现象。
在空气中向水面倾斜俯视时,看到水中的物体会被看做折射了一定的角度。
这也是玻璃的粗细会影响图像的原因,因为玻璃的折射率不同,所以在不同位置光线偏向的角度不同。
总结光学是研究光的性质和现象的学科。
反射和折射是光学中非常重要的现象。
net反射的应用场景原理1. 什么是反射反射(Reflection)是指程序在运行时可以访问、检测和修改其它程序的属性和行为的能力。
在面向对象的编程语言中,反射允许我们在运行时获取和操作类、对象、接口等的信息。
2. net反射的概述在.NET框架中,我们可以使用反射来操作和访问程序集中的类型信息、成员信息等。
通过反射,我们可以在运行时动态地加载程序集、创建对象、调用成员,并且可以在不需要事先了解程序集结构的情况下进行操作。
3. net反射的应用场景3.1 动态加载程序集在某些情况下,我们可能需要在运行时根据条件动态加载程序集。
使用反射,我们可以在程序运行时通过名称来加载程序集,并且可以查找、实例化其中的类型。
这种动态加载的能力使得我们可以实现插件式开发、模块化开发等灵活的架构设计。
3.2 自动生成代码在某些场景下,我们可能需要根据已有的类型信息来生成代码。
例如,我们可以使用反射来读取一个类的属性和方法,然后动态生成对应的代码。
这种技术在一些自动化代码生成工具中得到广泛应用,可以极大地提升开发效率。
3.3 实现ORM框架ORM(Object Relational Mapping)框架是一种将数据库表映射为对象的框架。
使用反射,我们可以动态地获取表结构的信息,并将其映射为对象的属性。
同时,反射还可以帮助我们动态地生成SQL语句,实现自动化的数据访问操作。
ORM框架的例子如Entity Framework、Hibernate等。
3.4 测试框架在测试框架中,反射是一个非常重要的组成部分。
通过反射,我们可以在不侵入被测程序的情况下,动态地获取和执行代码的信息。
测试框架可以根据测试代码中的注解或标记,使用反射来发现、执行测试用例,并且可以在运行时动态地生成测试报告。
3.5 分析和调试工具分析和调试工具通常需要深入了解程序的内部结构和运行时状态。
使用反射,我们可以在运行时动态地获取程序的类型信息、变量值等,并对其进行分析和调试。
高一数学《简单的图形反射》知识点总结在高中数学中,学习图形的变换是一个重要的知识点。
其中,图形的反射是一种常见的变换方式。
本文将对高一数学中的《简单的图形反射》知识点进行总结,包括反射的定义、性质、应用以及解题方法等内容,以帮助同学们更好地掌握这一知识点。
一、反射的定义及性质反射是指将一个图形通过一条直线投射到另一侧,使得图形在直线上的每一点与其对应的对称点成为一对。
反射可以发生在任意直线,被称为反射轴。
在反射中,图形的形状和大小保持不变,只是位置发生改变。
反射具有以下性质:1. 对称性:反射后的图形与原图形是对称的,其性质、长度、角度、面积等均相等。
2. 反向性:反射前后物体的移动方向相反。
3. 共线性:反射前后的对应点在同一直线上。
二、反射的应用反射在生活和实际问题中有广泛的应用,以下是一些常见的应用场景:1. 镜子:我们经常使用镜子来看自己,其实镜子就是一种反射体。
镜子中的我们看起来与实际的我们是对称的。
2. 天体观测:望远镜通过反射光线,使得我们能够观测到远处的天体,帮助我们研究宇宙。
3. 地图制作:地图的制作中,常常使用反射原理进行投影,使得地球表面的曲面图投影到平面上。
三、解题方法当遇到与图形反射相关的问题时,我们可以通过以下几个步骤来解题:1. 确定反射轴:首先,我们需要明确反射轴的位置和方向。
这可以通过题目给出的条件来确定。
常见的反射轴包括x轴、y轴、直线y=x 等。
2. 确定反射图形:根据反射轴,确定反射后图形的位置。
对于对称图形,可以通过直接确定对称点来得到反射图形。
3. 应用其他数学知识:有时候,我们需要用到其他的数学知识来解题,例如线性方程组、勾股定理等。
综上所述,高一数学中的《简单的图形反射》是一个重要且常见的知识点。
通过学习反射的定义、性质、应用以及解题方法,我们可以更好地理解和运用这一知识,在解决实际问题中发挥作用。
希望同学们通过本文的总结,能够加深对反射知识的理解,提高解题的能力,为今后的数学学习打下坚实的基础。
第2课时光的反射及其应用环节1课前自学准备导案备课笔记步骤1明确课表要求步骤2课前自主学习备课笔记镜面反射和漫反射(多媒体课件)教师引导学生讨论教材P75“想想议议”.教师总结:为了保护同学的眼睛,改变这种现状的建议是:用不易反光的材料制步骤4课堂析疑解难备课笔记教 材 习 题 解 答【教材P75“想想议议”】有时,黑板反射的光会“晃”着一些同学的眼睛.请画出这种现象的光路.为了保护同学们的眼睛,请你根据所学的知识提出改变这种状况的建议.解:光路如右图.建议:用不易反光的材料制造黑板.【教材P76“动手动脑学物理”】4.雨后晴朗的夜晚,为了不踩到地上的积水,人们根据生活经验判断:迎着月光走,地上发亮的是水;背着月光走,地上发暗的是水.请你依据所学光的反射知识进行解释.解:迎着月光走时,月光照射到水面,发生镜面反射,反射光线进入人眼较多,人感觉地上有积水处就很亮,而无水的地面发生漫反射,反射光线向各个方向射出,进入人眼的光线较少,感觉就比水面暗;背着月光走时,月光照射到水面,发生镜面反射,反射光线没有进入人眼,而地面无水处发生的漫反射却有光线进入人眼,人就感觉地上积水处较暗.5.激光测距技术广泛应用在人造地球卫星测控、大地测量等方面.激光测距仪向目标发射激光脉冲束,接收反射回来的激光束,测出激光往返所用的时间,就可以算出所测天体与地球之间的距离.现在利用激光测距仪测量月、地之间的距离,精度可以达到±10cm.已知一束激光从激光测距仪发出并射向月球,大约经过2.53s 反射回来,则地球到月球的距离大约是多少千米?解:因为光速约为3×108m/s ,反射回来的时间t=2.53s ,则地球到月球的距离s=1/2vt=1/2×3×108m/s ×2.53s=3.8×108m=3.8×105km.难 题 解 答【例】如图所示,晚上在桌面上铺一张白纸,把一块小平面镜铺放在白纸上(镜面朝上),让手电筒的光正对着白纸和平面镜照射,从侧面看上去( )A.镜子比较亮,它发生了镜面反射B.镜子比较暗,它发生了漫反射C.白纸比较亮,它发生了漫反射D.白纸比较暗,它发生了镜面反射解析:镜子表面光滑,光线垂直入射到镜面时,发生的是镜面反射,光线均按原方向反射回去,所以在侧面看不到反射光,镜面比较暗.白纸表面粗糙,光射在白纸的上面发生漫反射,反射光朝各个方向射出,所以在侧面能看到部分反射光,即白纸比较亮.答案:C备课笔记环节3课后反馈总结练案步骤5课后达标坚持检测布置作业:教师引导学生课后完成本课时对应练习,并预习下一课时内容.步骤6课后教学反思。
第1课光的反射及运用【要点梳理】1.光的反射①光在传播过程中遇到两种介质的分界面时返回原介质中的现象叫做光的反射。
光投射到任何物体表面都会反射,只不过反射强弱有别,都遵循光的反射定律。
②关于光的反射定律,应抓住:入射光线、反射光线、法线三线共面(共面);入射光线、反射光线分居法线两侧(异侧);反射角等于入射角这三层意思。
③镜面反射和漫反射都遵循光的反射定律,漫反射使我们能从不同方向看到本身不发光的物体。
平面镜成像、水中的倒影等现象都是由于光的反射形成的。
【热身演练】1.如图所示,有一正方形的不透光房间,其中的一面墙上开有一个圆形小孔,这面墙的对面有一个正方形的平面镜。
一个人靠在与平面镜垂直的一侧墙面上,当有一束垂直于圆孔的平行光通过圆孔射到平面镜上时,他能看到的是( )A.镜面上有一个圆形的亮斑 B.整个正方形镜子的形状C.整个房间都是亮的 D.感到整个房间是一片黑暗2.小明的写字台上有一盏台灯。
晚上在灯前学习的时候,铺在台面上的玻璃“发出”刺眼的亮光,影响阅读。
在下面的解决方法中,最简单、效果最好的是()A.把台灯换为吊灯 B.把台灯放到正前方C.把台灯移到左臂外侧 D.把台灯移到右臂外侧3.在平静的湖面边,有一幢距湖面19米高的楼房,有位同学在距楼顶地面1米高的观测仪上测得一个飞在湖面上空的风筝的仰角为30°,测得风筝在湖水中的倒影的俯角为60°,则此时风筝离湖面有多高【典例分析】例1.平面镜MO和NO为两个侧面的一个黑盒子里有一个点光源S,黑盒子的一侧面EN上开有一小孔P(如图所示)。
一个观察者在盒外与EN平行的方向走过时,通过P孔能看到S所发出的光的次数为( )A.1次 B.2次 C.3次 D.4次变式训练1:(1)如图所示,两个相互垂直的平面镜,在其中任一位置放置光源S,那么它所成的像共有()A.1个B.2个C.3个D.4个(2)如果上述两个夹角为89O呢?为60O呢?例2.如图所示,在竖直平面xoy内,人眼位于P(0,4)位置处,平面镜MN竖直放置其两端M、N的坐标分别为(3,1)和(3,0),某发光点S在该竖直平面y轴的右半部分某一区域内自由移动时,此人恰好都能通过平面镜看见S的像,则该区域的最大面积为()(图中长度单位为:米)A.0.5米2 B.3.5米2 C.4米2 D.4.5米2变式训练2:如图所示,一根长度为L的直薄木条上有两个观察小孔,两小孔之间的距离为d,d恰好是某个人两眼间的距离。
物理教案:镜面反射的应用。
一、什么是镜面反射?镜面反射指的是光线(或其他波动)撞击在平滑的表面上并沿着和撞击面法线相等但方向相反的角度反射出去的现象。
与之相对应的是漫反射,漫反射是当光线撞击在不平滑的表面上时,会在各个方向进行反射。
在实际生活中,我们能够观察到的大部分的反射现象都是镜面反射。
二、镜面反射在生活中的应用1、镜子镜子是最常见的应用镜面反射的物品。
我们可以用镜子打扮自己,给自己拍照,观察自己的姿态和表情等等。
镜头、望远镜、显微镜等也是这种我们日常中经常使用的器具。
试想,如果没有镜面反射,我们又该如何观察自己的样子呢?2、汽车车镜汽车车镜也是一种大量应用镜面反射的工具。
路上的车辆、行人等随时可能冒出来,如果前方的不明情况,可以借助车后视镜来了解情况。
如果没有车镜,司机就要不停地转头看,既影响驾驶,又不安全。
3、刀具、头发美容器等在生产中,经常需要对指定的区域进行磨削或加工。
为了避免切割面上的磨损和变形,我们需要使用精密设备,如显微镜、投影仪等,来进行观察和调整。
而对于美容工具,如电吹风、卷发棒、顶上吹风机等,也都利用了镜面反射来加强其使用效果。
三、如何在教学中恰当地应用镜面反射1、通过实验进行观测在教学中,我们可以使用光线、平面和反射点等工具,设置简单的实验。
例如,在平面上使光线光源发射的光线反射,让学生将所学到的知识应用到实际操作中,进而加深对镜面反射的理解。
2、讲解技巧在教学中,我们可以告诉学生如何通过镜子观察自己和与他人交流;如何通过刀具的反光观察刀口;如何利用汽车车镜观察行驶中的情况等。
这些小技巧可以让学生感受到物理知识的实际应用,提高学生的学习兴趣。
四、总结镜面反射虽然是一个简单的物理概念,但却有着广泛的应用。
通过对镜面反射的学习和应用,我们可以更好地理解和掌握这个概念,并帮助学生将所学习的知识与实际生活相结合。
我相信,在我们共同的努力下,学生们一定会更加热爱学习、更加喜欢物理。
如何应用光的反射原理进行光学仪器设计?在我们的日常生活和科学研究中,光学仪器发挥着至关重要的作用。
从常见的镜子、望远镜到复杂的显微镜、激光设备,这些仪器的设计和运作都离不开光的反射原理。
那么,如何巧妙地应用这一原理来设计出实用且高效的光学仪器呢?首先,我们需要深入理解光的反射原理。
当光线照射到一个表面时,它会遵循特定的规律进行反射。
反射光线与入射光线和法线都在同一平面内,并且反射光线和入射光线分居法线两侧,反射角等于入射角。
这个基本规律是我们进行光学仪器设计的基石。
以平面镜为例,它是最简单的利用光反射原理的光学元件。
平面镜能够反射光线,使得我们看到物体的像。
在设计平面镜相关的光学仪器时,我们需要考虑平面镜的平整度和光洁度。
平整度决定了反射光线的方向是否准确,光洁度则影响反射光线的强度和清晰度。
在更复杂的光学仪器中,比如望远镜,光的反射原理的应用就更加巧妙了。
反射式望远镜主要由一个大的抛物面镜和一个小的平面镜组成。
入射的光线首先被抛物面镜反射汇聚到一个焦点上,然后通过平面镜的反射,将光线引导到目镜中,供观测者观察。
在这个设计中,抛物面镜的形状和精度至关重要。
它需要被精确地制造,以确保光线能够准确地汇聚到焦点上,从而提供清晰的图像。
显微镜的设计也离不开光的反射原理。
在一些高级的显微镜中,会使用反射式照明系统来照亮样本。
通过精心设计的反射镜和透镜组合,光线能够均匀地照射到样本上,并被收集和放大,使得我们能够观察到微小的细节。
在激光设备的设计中,光的反射同样起着关键作用。
激光腔中的反射镜能够使光线在腔内来回反射,不断增强,从而形成高强度、高方向性的激光束。
这里对反射镜的反射率和稳定性要求极高,任何微小的偏差都可能影响激光的性能。
除了上述的例子,还有许多其他的光学仪器,如分光光度计、干涉仪等,都充分利用了光的反射原理。
在设计这些仪器时,我们需要综合考虑多个因素。
材料的选择是其中一个重要方面。
不同的材料对光的反射性能不同,例如,银的反射率在可见光范围内较高,但容易氧化;而铝的反射率也不错,且相对更稳定。
C#反射的Assembly的简单应用反射(Reflection)是.NET中的重要机制,通过反射,可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。
还可以获得每个成员的名称、限定符和参数等。
有了反射,即可对每一个类型了如指掌。
如果获得了构造函数的信息,即可直接创建对象,即使这个对象的类型在编译时还不知道。
Assembly就是反应反射的一种应用,它定义和加载程序集,加载在程序集清单中列出模块,以及从此程序集中查找类型并创建该类型的实例。
简单地说就是,使用Assembly在程序中你不用事先写比如下面的东西了:PersonClass person = new PersonClass();person.Method();你只要知道PersonClass这个类的程序集,命名空间和类名直接使用反射就可以使用。
你只需要这样写:PersonClass person;person =person = (PersonClass)(Assembly.Load("程序集").CreateInstance("命名空间.类名", false, BindingFlags.Default, null, args, null, null));person.Method();下面用一个小例子来看看Assembly应用的方便性。
需求:有几种文件格式,后缀分别是.One,.Two,.Three,... 有很多种,后续还可能增加。
这些文件的格式都不一样,也就是说读取方式就不一样。
那么根据传入的文件后缀和路径读出文件的内容。
实现:这种需求的特点是,根据选择做不同的处理,但是都是出的一种结果,那么可以使用简单工厂模式来完成。
读取文件有一个父类FileSuper,内部如下:using System;using System.Collections.Generic;using System.Text;namespace reflect{public abstract class FileSuper//获取不同后缀名文件的内容{public abstract string GetFileContext(string fileFullPath); }}分别有MyFileOne,MyFileTwo,MyFileThree等,继承FileSuper,如下:using System;using System.Collections.Generic;using System.Text;namespace reflect{public class MyFileOne : FileSuper{public override string GetFileContext(string fileFullPath) {return "One类型文件的内容";}}}using System;using System.Collections.Generic;using System.Text;namespace reflection;public class MyFileTwo : FileSuper{public override string GetFileContext(string fileFullPath) {return "Two类型文件的内容";}}}using System;using System.Collections.Generic;using System.Text;namespace reflect{public class MyFileThree : FileSuper{public override string GetFileContext(string fileFullPath) {return "Three类型文件的内容";}}}一个工厂类根据后缀名决定实例化哪个类:using System;using System.Collections.Generic;using System.Text;namespace reflect{public class OperationFile{static FileSuper fileSuper = null;public static string GetStringByFile(string fileFullPath, string extendName){switch (extendName){case "One":fileSuper = new MyFileOne();break;case "Two":fileSuper = new MyFileTwo();break;case "Three":fileSuper = new MyFileThree();break;}if (fileSuper != null){return fileSuper.GetFileContext(fileFullPath);}return "没有指定的类型";}}}客户端调用,显示结果:using System;using System.Collections.Generic;using System.Text;namespace reflect{public class Program{static void Main(string[] args){string fileContext = OperationFile.GetStringByFile("路径", "One");Console.WriteLine(fileContext);Console.ReadLine();}}}这样解决了这个需求,前面在读书笔记6:工厂方法模式中提到了这种方式的缺点,就是不符合开放封闭原则,那么如何改进了,除了工厂方法模式,我们可以使用Assembly。
使用它之前,要先写一个类和一个配置文件。
先看配置文件:MyFile.xml<?xml version="1.0" encoding="utf-8" ?><FileExtendName><extend><name>One</name><class>MyFileOne</class></extend><extend><name>Two</name><class>MyFileTwo</class></extend><extend><name>Three</name><class>MyFileThree</class></extend></FileExtendName>是后缀名和类名的对应。
另一个读取配置文件的类ExtendNameDataTable。
using System;using System.Collections.Generic;using System.Text;using System.Data;namespace reflect{public class ExtendNameDataTable{private static DataSet extendDataSet;public static DataSet ExtendDataSet {get{if (extendDataSet == null){extendDataSet = new DataSet();extendDataSet.ReadXml(@"F:\MyFile.xml");}return extendDataSet;}}}}做好这两个准备后,只需修改OperationFile工厂类,其余都不用修改。
使用Assembly来根据配置文件,自动按照传入的后缀名加载类,并且实例化,修改后的OperationFile如下:using System;using System.Collections.Generic;using System.Text;using System.Data;using System.Reflection;namespace reflect{public class OperationFile{public static string GetStringByFile(string fileFullPath, string extendName){DataRow dr =((DataRow[])ExtendNameDataTable.ExtendDataSet.Tables[0].Select("name='" + extendName + "'"))[0];object[] args = null;FileSuper fileSuper;fileSuper =(FileSuper)(Assembly.Load("reflect").CreateInstance("reflect." + dr["class"].ToString(), false, BindingFlags.Default, null, args, null, null));return fileSuper.GetFileContext(fileFullPath);}}}客户端调用不变输出结果:我们看到,这样一来,如果有了新的文件结构,只需要再写一个MyFileFour类继承自FileSuper;然后再在MyFile.xml中增加相应的对应关系就可以了,避免了要修改OperationFile的case分支,符合开放封闭原则。
当然Assembly这么好使用,也不是所有情况下都能用的,当在循环中碰到了这种情况,那么还是使用简单工厂模式或者工厂方法模式吧,因为再循环中使用Assembly实例化会导致性能下降。