只有一个实例被创建出来的模式叫做单例模式。 核心意义:保证一个类只有一个实例,并提供一个访问它的全局访问方法。
以下为本地类测试:
*----------------------------------------------------------------------* * CLASS zcl_log DEFINITION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS zcl_log DEFINITION. PUBLIC SECTION. "定义一个静态方法用于创建实例对象,保证只有一个实例对象存在 CLASS-METHODS get_instance RETURNING value(ro_log) TYPE REF TO zcl_log. "用于给调用者传值 METHODS set_msg IMPORTING iv_msg TYPE string. "输出传递值 METHODS print_msg. PRIVATE SECTION. "定义一个静态属性用于创建实例 CLASS-DATA: mo_log TYPE REF TO zcl_log. "传递的值 DATA: mv_msg TYPE string VALUE 'INT_VALUE'. ENDCLASS. "zcl_log DEFINITION *----------------------------------------------------------------------* * CLASS zcl_log IMPLEMENTATION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS zcl_log IMPLEMENTATION. METHOD get_instance. "判断实例是否存在 IF mo_log IS NOT BOUND. CREATE OBJECT mo_log. ENDIF. ro_log = mo_log. ENDMETHOD. "get_instance METHOD set_msg. mv_msg = iv_msg. ENDMETHOD. "set_msg METHOD print_msg. WRITE:/ 'Object message is:', mv_msg. ENDMETHOD. "print_msg ENDCLASS. "zcl_log IMPLEMENTATION START-OF-SELECTION. "声明两个指针用于测试 DATA: go_zcl_log1 TYPE REF TO zcl_log, go_zcl_log2 TYPE REF TO zcl_log. "创建实例, 不傳值,输出应该是默认值 go_zcl_log1 = zcl_log=>get_instance( ). go_zcl_log1->print_msg( ). " 调用方法传值,输出传递参数数据 go_zcl_log1->set_msg( 'Instance object 0001 message' ). go_zcl_log1->print_msg( ). " 此时已存在实例,输出应该是上一次传递参数值 go_zcl_log2 = zcl_log=>get_instance( ). go_zcl_log2->print_msg( ). "判断实例是否相同 IF go_zcl_log1 = go_zcl_log2. WRITE:/ 'Equal'. ELSE. WRITE:/ 'Not Equal'. ENDIF.执行结果: