您现在的位置是:主页 > 数据库技术 > 数据库技术

服务器中反射是什么

IDCBT2022-01-06服务器技术人已围观

简介这篇文章主要介绍“服务器中反射是什么”,在日常操作中,相信很多人在服务器中反射是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”

这篇文章主要介绍“服务器中反射是什么”,在日常操作中,相信很多人在服务器中反射是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”服务器中反射是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

通用型软件框架的难题

假设我们希望开发一套通用型的软件框架,这个框架允许用户自定义大量不同的情况下的回调函数(方法),用来实现丰富多彩的业务逻辑功能,例如一个游戏脚本引擎,那么,其中一个实现方式,就是使用观察者模式,以事件的方式来驱动整个框架。用户通过定义各个事件的响应函数,来组织和实现业务逻辑。而框架也提供了自定义事件及其响应函数的入口。在一些实现代码中,我们可能会发现有大量的“注册事件”的代码,或者是使用一个巨大的switch…case…对事件函数进行分发调用。譬如我们想做一个服务器端的基本进程框架,这个框架让用户只需要填写一些回调函数,就能成为一个稳定持续运行的后台服务进程。其中一个部分,就是需要定义程序启动事件,以便用户自定义程序启动要做的事情。那么我们可以定义一个”Init”的字符串来代表这个事件,在一个事件响应函数的回调哈希表里面,记录上”Init”pfunInit()。又或者是用一个常量宏INIT=12来表示此事件,在程序的主循环处,利用switch…case…来检查代表每个事件的类型编码,如果发现是和INIT宏相等的,就调用case INIT下面的代码(往往是一个单独的函数,如pfunINit())

维护长长的“注册事件”代码和长长的switch…case…都一样的让人昏昏欲睡,同时容易让人错漏百出。这些代码往往还带有大量的“常量”,因为用来作为回调函数的key的数据,往往都是一些自定义的常量。这些常量的同步维护,也往往让人筋疲力尽。这些长长的代码清单,经常还都需要由多个开发者一起来使用,自然就很容易发生你错改了我的,我覆盖了你的这一类问题。这些问题非常的“低级”,但是要找起来却一点都不容易。

[游戏的按键控制代码/JS]

难道我们的框架代码中,就一定会充斥着长长的字符串常量,或者整数常量吗?答案是否定的,因为很多编程语言,都提供能反射的功能。在编译型语言如C/C++里面,也可以利用代码生成技术,模拟出类似反射的能力。

什么是反射

要想知道什么是反射,我们可以先来看一个观察者模式的例子。假设我们在编写一个GUI的程序:在一个窗体上安放了一个按钮,此按钮的名字叫“ButtonA”,当这个按钮按下的时候,我们希望有一个我们自己写的函数被调用。根据观察者模式的设计,这个按钮被用户按下后,程序底层应该能监测到这个事情,然后在进程内部产生一个“事件”,这个“事件”对象往往会带有这个信息:被按下的按钮名字。如果我们用以前的注册事件的方法来编码,我们必须要在按钮被按下之前,比如程序初始化的时候,就向观察者对象注册这样一个回调函数:

标签:

很赞哦! ()

本栏推荐