尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

127、单例模式等设计模式

127、单例模式等设计模式 127、单例模式等设计模式昨天处理了一个接口偶发重复提交的问题。断点加到函数模块入口,入参一样,第一次调用和第二次调用返回的结果却不一样。顺着调用栈往下追,看到ZCL_ORDER_CACHE类的静态变量里躺着一笔上一订单的抬头数据。类定义上明明白白写着“SINGLETON”,注释也写了,图标也画了,可就是串了。我盯着那行CLASS-DATA go_cache TYPE REF TO zcl_order_cache.看了三分钟,最后在代码里找到了另一个同事自己加的方法RESFRESH_INSTANCE。单例模式之所以脆弱,不是因为模式本身,而是一群老哥太喜欢往单例里塞状态。ABAP 里的单例和 Java 里不完全是一个东西。Java 里的静态变量属于类加载器,ABAP 里的静态属性属于当前工作进程。理解不了这一条,后面全是坑。先看一个标准写法:CLASS zcl_singleton DEFINITION PUBLIC FINAL CREATE PRIVATE. PUBLIC SECTION. CLASS-METHODS get_instance RETURNING VALUE(ro_instance) TYPE REF TO zcl_singleton. PRIVATE SECTION. CLASS-DATA go_instance TYPE REF TO zcl_singleton. METHODS constructor. ENDCLASS. CLASS zcl_
返回列表