一种功能调整方法、装置及电子设备与流程

文档序号:29799357发布日期:2022-04-23 19:42阅读:90来源:国知局
一种功能调整方法、装置及电子设备与流程

1.本发明涉及计算机技术领域,更具体的说,涉及一种功能调整方法、装置及电子设备。


背景技术:

2.在项目开发过程中,为增强模型功能,通常会在模型的一个功能上迭代开发,导致在一个功能上增加大量的功能代码,从而不可避免会出现未知漏洞,对现有功能造成影响。另外,随着功能的增多,为实现功能扩展,需要在一个模型上封装很多功能,此时就需要对原有功能代码进行改动,增加新功能的相关代码。然而,随着功能的增多,各个功能之间可能会相互影响,从而导致排查问题难度增大。
3.综上,如何在不改动功能原有代码的基础上,增强功能和/或实现功能扩展,成为本领域技术人员亟需解决的技术问题。


技术实现要素:

4.有鉴于此,本发明公开一种功能调整方法、装置及电子设备,以实现在不改动功能原有代码的基础上,对待装饰目标函数进行功能增强和/或功能扩充。
5.一种功能调整方法,包括:
6.确定待装饰目标函数;
7.调用预先创建的第一函数装饰器,其中,所述第一函数装饰器采用装饰者模式对被装饰函数的功能封装后得到;
8.将功能调整参数输入至所述第一函数装饰器,得到第二函数装饰器;
9.将所述第二函数装饰器与所述待装饰目标函数进行关联,通过所述第二函数装饰器对所述待装饰目标函数进行功能调整。
10.可选的,所述第一函数装饰器为节流函数装饰器、日志输出装饰器和打点函数装饰器中的任意一种。
11.可选的,当所述第一函数装饰器为所述节流函数装饰器时,所述节流函数装饰器的创建过程包括:
12.当所述被装饰函数为节流函数时,获取所述节流函数的函数本身值,记为第一函数本身值,并将所述第一函数本身值记录为属性描述符值;
13.判断所述第一函数本身值中是否存在表征所述第一函数本身值为首次调用的变量;
14.如果所述第一函数本身值中存在所述变量,则从所述第一函数本身值中删除所述变量,得到第二函数本身值;
15.根据所述第二函数本身值得到所述节流函数装饰器。
16.可选的,所述节流函数装饰器的创建过程还包括:
17.当所述第一函数本身值中不存在所述变量且所述第一函数本身值中存在立即执
行参数时,直接执行所述第一函数本身值,得到所述节流函数装饰器。
18.可选的,所述根据所述第二函数本身值得到所述节流函数装饰器,包括:
19.判断所述第二函数本身值中是否存在立即执行参数;
20.当所述第二函数本身值中不存在所述立即执行参数时,在预设等待时间后执行所述第二函数本身值得到所述节流函数装饰器;或者,当所述第二函数本身值中存在所述立即执行参数时,直接执行所述第二函数本身值得到所述节流函数装饰器。
21.可选的,当所述第一函数装饰器为所述日志输出装饰器时,所述日志输出装饰器的创建过程包括:
22.当所述被装饰函数为日志函数时,获取所述日志函数的函数本身值,记为第三函数本身值,并将所述第三函数本身值记录为属性描述符值;
23.对所述第三函数本身值进行重新定义得到第四函数本身值;
24.执行所述第四函数本身值得到所述日志输出装饰器。
25.可选的,当所述第一函数装饰器为所述打点函数装饰器时,所述打点函数装饰器的创建过程包括:
26.当所述被装饰函数为打点函数时,将原始方法值记录为属性描述符值;
27.对所述原始方法值进行重新定义得到目标方法值;
28.基于所述目标方法值得到所述打点函数装饰器。
29.可选的,还包括:
30.获取所述被装饰函数的的返回值,并对所述返回值进行处理后输出,所述返回值包括:点位或项目初始化参数。
31.一种功能调整装置,包括:
32.确定单元,用于确定待装饰目标函数;
33.调用单元,用于调用预先创建的第一函数装饰器,其中,所述第一函数装饰器采用装饰者模式对被装饰函数的功能封装后得到;
34.参数输入单元,用于将功能调整参数输入至所述第一函数装饰器,得到第二函数装饰器;
35.功能调整单元,用于将所述第二函数装饰器与所述待装饰目标函数进行关联,通过所述第二函数装饰器对所述待装饰目标函数进行功能调整。
36.一种电子设备,所述电子设备包括存储器和处理器;
37.所述存储器用于存储至少一个指令;
38.所述处理器用于执行所述至少一个指令以实现上述所述的功能调整方法。
39.从上述的技术方案可知,本发明公开了一种功能调整方法、装置及电子设备,确定待装饰目标函数,调用预先创建的第一函数装饰器,该第一函数装饰器采用装饰者模式对被装饰函数的功能封装后得到,将功能调整参数输入至第一函数装饰器得到第二函数装饰器,将第二函数装饰器与待装饰目标函数进行关联,通过第二函数装饰器对待装饰目标函数进行功能调整。本发明通过将功能调整参数输入至第一函数装饰器,使得到第二函数装饰器具有了与功能调整参数对应的功能,通过将第二函数装饰器与待装饰目标函数进行关联,实现了在不改动功能原有代码的基础上,对待装饰目标函数进行功能增强和/或功能扩充。
附图说明
40.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据公开的附图获得其他的附图。
41.图1为本发明实施例公开的一种功能调整方法流程图;
42.图2为本发明实施例公开的一种节流函数装饰器的创建方法流程图;
43.图3为本发明实施例公开的一种日志输出装饰器的创建方法流程图;
44.图4为本发明实施例公开的一种打点函数装饰器的创建方法流程图;
45.图5为本发明实施例公开的一种功能调整装置的结构示意图;
46.图6为本发明实施例公开的一种电子设备的结构示意图。
具体实施方式
47.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
48.本发明实施例公开了一种功能调整方法、装置及电子设备,确定待装饰目标函数,调用预先创建的第一函数装饰器,该第一函数装饰器采用装饰者模式对被装饰函数的功能封装后得到,将功能调整参数输入至第一函数装饰器得到第二函数装饰器,将第二函数装饰器与待装饰目标函数进行关联,通过第二函数装饰器对待装饰目标函数进行功能调整。本发明通过将功能调整参数输入至第一函数装饰器,使得到第二函数装饰器具有了与功能调整参数对应的功能,通过将第二函数装饰器与待装饰目标函数进行关联,实现了在不改动功能原有代码的基础上,对待装饰目标函数进行功能增强和/或功能扩充。
49.参见图1,本发明实施例公开的一种功能调整方法流程图,该方法包括:
50.步骤s101、确定待装饰目标函数;
51.本实施例中的待装饰目标函数也即需要进行功能增强和/功能扩展的函数。
52.步骤s102、调用预先创建的第一函数装饰器。
53.其中,所述第一函数装饰器采用装饰者模式对被装饰函数的功能封装后得到。
54.装饰者模式指的是:在无需改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。装饰者模式是通过创建一个包装对象,也就是装饰器来包裹真实的对象。
55.步骤s103、将功能调整参数输入至所述第一函数装饰器,得到第二函数装饰器;
56.通过将不同的功能调整参数输入至第一函数装饰器,可以得到具有不同功能的第二函数装饰器。
57.步骤s104、将所述第二函数装饰器与所述待装饰目标函数进行关联,通过所述第二函数装饰器对所述待装饰目标函数进行功能调整。
58.为便于理解,举例说明第二函数装饰器和待装饰目标函数的关系,将第二函数装饰器类比于防摔手机壳,将待装饰目标函数类比于手机,本实施例将第二函数装饰器与待装饰目标函数进行关联,相当于在手机外面套上一个防摔手机壳,防摔手机壳可以增强手
机的防摔功能,但是对手机自身的通话功能和充电功能等不造成任何影响,并且防摔手机壳可以随时从手机上去掉。
59.综上可知,本发明公开了一种功能调整方法,确定待装饰目标函数,调用预先创建的第一函数装饰器,该第一函数装饰器采用装饰者模式对被装饰函数的功能封装后得到,将功能调整参数输入至第一函数装饰器得到第二函数装饰器,将第二函数装饰器与待装饰目标函数进行关联,通过第二函数装饰器对待装饰目标函数进行功能调整。本发明通过将功能调整参数输入至第一函数装饰器,使得到第二函数装饰器具有了与功能调整参数对应的功能,通过将第二函数装饰器与待装饰目标函数进行关联,实现了在不改动功能原有代码的基础上,对待装饰目标函数进行功能增强和/或功能扩充。
60.本发明中的第一函数装饰器可以根据实际需要随时扩展功能和增强功能,也可以随时删除。并且一次封装,可以多次复用,具有模块化优势。
61.本实施例中,第一函数装饰器包括但不限于节流函数装饰器、日志输出装饰器和打点函数装饰器中的任意一种。
62.为便于理解第一函数装饰器的构建过程,本发明提供了三个具体实施例,如下:
63.当第一函数装饰器为节流函数装饰器时,参见图2,本发明实施例公开的一种节流函数装饰器的创建方法流程图,该方法包括:
64.步骤s201、当被装饰函数为节流函数时,获取节流函数的函数本身值,记为第一函数本身值,并将第一函数本身值记录为属性描述符值;
65.本实施例中,节流函数的函数本身值,也即第一函数本身值用descriptor表示,本实施例中将第一函数本身值记录为属性描述符值descriptor.value。
66.步骤s202、判断所述第一函数本身值中是否存在表征所述第一函数本身值为首次调用的变量,如果是,则执行步骤s203;
67.在实际应用中,表征第一函数本身值为首次调用的变量可以用timer表示。
68.步骤s203、从所述第一函数本身值中删除所述变量,得到第二函数本身值;
69.通过从第一函数本身值中删除表征首次调用的变量,可以使得第一函数本身值下次调用时,可以直接确定该第一函数本身值为非首次调用。
70.步骤s204、根据所述第二函数本身值得到节流函数装饰器。
71.具体的,判断第二函数本身值中是否存在立即执行参数;
72.当所述第二函数本身值中不存在所述立即执行参数时,在预设等待时间后执行所述第二函数本身值得到所述节流函数装饰器;或者,当所述第二函数本身值中存在所述立即执行参数时,直接执行所述第二函数本身值得到所述节流函数装饰器。
73.本实施例中的立即执行参数可以用now表示。
74.本实施例中的预设等待时间可以用wait表示,节流函数装饰器可以用debounce表示。
75.需要特别说明的是,预设等待时间wait和立即执行参数now是节流函数装饰器的两个功能调整参数。
76.当需要对待装饰目标函数进行功能增强或是功能扩充时,将预设等待时间wait和立即执行参数now输入至节流函数装饰器可以得到目标节流函数装饰器,并对待装饰目标函数套上作为外套函数的目标节流函数装饰器@debounce(interval,boolean)即可,目标
节流函数装饰器@debounce(interval,boolean)在不使用时,直接从待装饰目标函数上脱下即可,并不会对待装饰目标函数的原有功能造成影响。
77.目标节流函数装饰器的调用示例@debounce(interval,boolean)取值,比如,@debounce(800,true)。
78.还需要说明的是,当目标节流函数装饰器需要返回一个函数时,自身需要接受三个参数,分别为:对象本身(target)、对象的键(key)和被装饰函数本身(descriptor)。
79.为进一步优化上述实施例,节流函数装饰器的创建方法还可以包括:
80.当所述第一函数本身值中不存在所述变量且所述第一函数本身值中存在立即执行参数时,直接执行所述第一函数本身值,得到所述节流函数装饰器。
81.当第一函数装饰器为日志输出装饰器时,参见图3,本发明实施例公开的一种日志输出装饰器的创建方法流程图,该方法包括:
82.步骤s301、当被装饰函数为日志函数时,获取所述日志函数的函数本身值,记为第三函数本身值,并将所述第三函数本身值记录为属性描述符值;
83.本实施例中,日志函数的函数本身值,也即第三函数本身值用descriptor表示,将第三函数本身值记录为属性描述符值descriptor.value。
84.步骤s302、对所述第三函数本身值进行重新定义得到第四函数本身值;
85.本实施例通过修改第三函数本身值,对第三函数本身值进行重新定义来得到新的函数本身值,也即第四函数本身值。
86.步骤s303、执行所述第四函数本身值得到日志输出装饰器。
87.当需要对待装饰目标函数进行功能增强或是功能扩充时,确定待输出日志函数,在日志输出装饰器输入功能调整参数即可。本实施例中的日志输出装饰器可以用logger表示。
88.本发明通过简单封装日志输出装饰器logger,在使用时只需要找到需要加上外套的函数,@logger(

输出什么内容’)即可,在不需使用时随时脱下函数外套即可,并不影响原有功能。
89.比如一个功能函数初始化,加上外套@logger(

初始化’);执行成功可以输出@logger(

输出成功’);执行失败可以控制输出@logger(

输出失败’)。
90.在实际应用中,日志输出装饰器可以接受一个参数,也可以接受多个参数自行封装。日志输出装饰器需要返回一个函数时,自身接受三个参数,分别为:对象本身(target)、对象的键(key)和被装饰函数本身(descriptor)。
91.本实施例中,日志输出装饰器的创建过程还包括:
92.获取日志函数的返回值,并对返回值进行处理后输出,其中,所述返回值包括:项目初始化参数。
93.当第一函数装饰器为打点函数装饰器时,参见图4,本发明实施例公开的一种打点函数装饰器的创建方法流程图,该方法包括:
94.步骤s401、当被装饰函数为打点函数时,将原始方法值记录为属性描述符值;
95.本实施例中的原始方法值可以表示为method值,属性描述符值表示为descriptor.value。
96.步骤s402、对原始方法值进行重新定义得到目标方法值;
97.本实施例通过修改原始方法值,对原始方法值进行重新定义来得到新的方法值,也即目标方法值。
98.步骤s403、基于所述目标方法值得到打点函数装饰器。
99.当需要对待装饰目标函数进行功能增强或是功能扩充时,在打点函数装饰器输入功能调整参数即可。本实施例中的打点函数装饰器可以用gotrack表示。
100.本发明通过封装打点函数装饰器gotrack,在使用时候只需要找到需要加上外套的函数,@gotrack(

点位’)即可。打点函数装饰器在多个功能可以运用,简单易行。
101.在实际应用中,打点函数装饰器可以接受一个参数,也可以接受多个参数自行封装。打点函数装饰器需要返回一个函数时,自身接受三个参数,分别为:对象本身(target)、对象的键(key)和被装饰函数本身(descriptor)。
102.本实施例中,打点函数装饰器的创建过程还包括:
103.获取打点函数的的返回值,并对返回值打点输出,该返回值包括:点位。
104.基于上述论述可知,本发明中获取被装饰函数的的返回值,并对所述返回值进行处理后输出,所述返回值包括:点位或项目初始化参数,被装饰函数包括:日志函数和打点函数。
105.通过图2~图4所示实施例可知,本发明中的第一函数装饰器实际上只是封装一个函数,可以在多处使用,第一函数装饰器之间有很大相似之处,一个功能只需要改动部分功能即可。在实际应用中,第一函数装饰器需要使用babel(一种新语法转换工具)转换一下语法。
106.与上述方法实施例相对应,本发明还公开了一种功能调整装置。
107.参见图5,本发明实施例公开的一种功能调整装置的结构示意图,该装置包括:
108.确定单元501,用于确定待装饰目标函数;
109.本实施例中的待装饰目标函数也即需要进行功能增强和/功能扩展的函数。
110.调用单元502,用于调用预先创建的第一函数装饰器,其中,所述第一函数装饰器采用装饰者模式对被装饰函数的功能封装后得到;
111.装饰者模式指的是:在无需改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。装饰者模式是通过创建一个包装对象,也就是装饰器来包裹真实的对象。
112.参数输入单元503,用于将功能调整参数输入至所述第一函数装饰器,得到第二函数装饰器;
113.通过将不同的功能调整参数输入至第一函数装饰器,可以得到具有不同功能的第二函数装饰器。
114.功能调整单元504,用于将所述第二函数装饰器与所述待装饰目标函数进行关联,通过所述第二函数装饰器对所述待装饰目标函数进行功能调整。
115.综上可知,本发明公开了一种功能调整装置,确定待装饰目标函数,调用预先创建的第一函数装饰器,该第一函数装饰器采用装饰者模式对被装饰函数的功能封装后得到,将功能调整参数输入至第一函数装饰器得到第二函数装饰器,将第二函数装饰器与待装饰目标函数进行关联,通过第二函数装饰器对待装饰目标函数进行功能调整。本发明通过将功能调整参数输入至第一函数装饰器,使得到第二函数装饰器具有了与功能调整参数对应的功能,通过将第二函数装饰器与待装饰目标函数进行关联,实现了在不改动功能原有代
码的基础上,对待装饰目标函数进行功能增强和/或功能扩充。
116.本发明中的第一函数装饰器可以根据实际需要随时扩展功能和增强功能,也可以随时删除。并且一次封装,可以多次复用,具有模块化优势。
117.为进一步优化上述实施例,本发明公开的功能调整装置还可以包括:装饰器创建单元;
118.所述装饰器创建单元用于创建第一函数装饰器。
119.当第一函数装饰器为节流函数装饰器、日志输出装饰器和打点函数装饰器中的任意一种时,所述装饰器创建单元具体用于:
120.创建节流函数装饰器、日志输出装饰器和打点函数装饰器中的任意一种。
121.需要特别说明的是,装饰器创建单元创建的第一函数装饰器包括但不限于节流函数装饰器、日志输出装饰器和打点函数装饰器,还可以创建其他的第一函数装饰器。
122.本实施例中,装饰器创建单元创建节流函数装饰器、日志输出装饰器和打点函数装饰器的具体原理请参见方法实施例对应部分,此处不再赘述。
123.与上述实施例相对应,如图6所示,本发明还提供了一种电子设备,电子设备可以包括:处理器1和存储器2;
124.其中,处理器1和存储器2通过通信总线3完成相互间的通信;
125.处理器1,用于执行至少一个指令;
126.存储器2,用于存储至少一个指令;
127.处理器1可能是一个中央处理器cpu,或者是特定集成电路asic(application specific integrated circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。
128.存储器2可能包含高速ram存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
129.其中,处理器执行至少一个指令实现如下功能:
130.确定待装饰目标函数;
131.调用预先创建的第一函数装饰器,其中,所述第一函数装饰器采用装饰者模式对被装饰函数的功能封装后得到;
132.将功能调整参数输入至所述第一函数装饰器,得到第二函数装饰器;
133.将所述第二函数装饰器与所述待装饰目标函数进行关联,通过所述第二函数装饰器对所述待装饰目标函数进行功能调整。
134.综上可知,本发明公开了一种电子设备,电子设备进行功能调整的过程为:确定待装饰目标函数,调用预先创建的第一函数装饰器,该第一函数装饰器采用装饰者模式对被装饰函数的功能封装后得到,将功能调整参数输入至第一函数装饰器得到第二函数装饰器,将第二函数装饰器与待装饰目标函数进行关联,通过第二函数装饰器对待装饰目标函数进行功能调整。本发明通过将功能调整参数输入至第一函数装饰器,使得到第二函数装饰器具有了与功能调整参数对应的功能,通过将第二函数装饰器与待装饰目标函数进行关联,实现了在不改动功能原有代码的基础上,对待装饰目标函数进行功能增强和/或功能扩充。
135.本发明中的第一函数装饰器可以根据实际需要随时扩展功能和增强功能,也可以
随时删除。并且一次封装,可以多次复用,具有模块化优势。
136.本发明还公开了一种计算机可读存储介质,计算机可读存储介质存储至少一个指令,所述至少一个指令被处理器执行时实现上述的功能调整方法。具体参见方法实施例对应部分,此处不再赘述。
137.最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
138.本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
139.对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1