日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【学习笔记】ABAP OOD设计模式 - 观察者模式

發布時間:2025/3/20 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【学习笔记】ABAP OOD设计模式 - 观察者模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ABAP OOD設計模式 - 觀察者模式

整理轉自—《SAP ABAP 面向對象程序設計(原則、模式及實踐)》

定義對象間的一對多的依賴關系,當一個對象的狀態發生改變時,這個對象相關依賴的所有對象都可以得到通知并能夠自動更新的行為模式就成為觀察者模式(Observer Pattern),觀察者模式屬于行為型模式。

效果:觀察者模式將觀察者和被觀察者解耦,被觀察者可以按需要增加或者刪除觀察者,并能夠將變化及時通知給所有相關的觀察者。

【示例】

比如工廠庫存消耗后低于一定量會觸發再訂貨點,郵件通知各采購處聯系人備貨。

創建接口“ZIF_PURCHASING_GROUP”的屬性和方法。

創建實現接口“ZIF_PURCHASING_GROUP”的類“ZCL_PURCHASING_GROUP_PL01”,并為繼承的方法“UPDATE_TASK_STATUS”添加代碼。

創建可繼承的抽象類“ZCL_INVENTORY_MGMT”,定義結構體和表類型,類屬性“MT_PURCHASING_GROUP”為內表變量,用于記錄觀察者。

添加類方法“ATTACH”,用于添加觀察者。

添加類方法“DELETE”,用于刪除觀察者。

添加類方法“NOTIFY”,用于通知所有觀察者。

創建繼承類“ZCL_INVENTORY_MGMT_PL01”,繼承上面的抽象類“ZCL_INVENTORY_MGMT”,并重新定義父類的方法“NOTIFY”。

添加測試程序。

*&---------------------------------------------------------------------* *&?Report??ZREP_CLS_C03 *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------*REPORT?ZREP_CLS_C03.DATA?:?EXC_REF?TYPE?REF?TO?CX_ROOT,EXC_TEXT?TYPE?STRING. DATA?:?GO_INV_MGMT_PL01?TYPE?REF?TO?ZCL_INVENTORY_MGMT_PL01,GO_PURCH_GROUP_PL01?TYPE?REF?TO?ZCL_PURCHASING_GROUP_PL01,GV_GROUP_ID?TYPE?STRING,GT_GROUP_ID?TYPE?STANDARD?TABLE?OF?STRING.TRY."模擬讀取Purchase?Group信息GV_GROUP_ID?=?'1001'.INSERT?GV_GROUP_ID?INTO?TABLE?GT_GROUP_ID.GV_GROUP_ID?=?'2001'.INSERT?GV_GROUP_ID?INTO?TABLE?GT_GROUP_ID.GV_GROUP_ID?=?'3001'.INSERT?GV_GROUP_ID?INTO?TABLE?GT_GROUP_ID.CREATE?OBJECT?GO_INV_MGMT_PL01."循環創建Purchase?Group對象,注冊到庫存管理被觀察者對象中。LOOP?AT?GT_GROUP_ID?INTO?GV_GROUP_ID.CREATE?OBJECT?GO_PURCH_GROUP_PL01.GO_PURCH_GROUP_PL01->ZIF_PURCHASING_GROUP~GROUP_ID?=?GV_GROUP_ID.GO_INV_MGMT_PL01->ATTACH(?GO_PURCH_GROUP_PL01?).FREE?GO_PURCH_GROUP_PL01.ENDLOOP."庫存發生變化時,通知相關的觀察者進行處理GO_INV_MGMT_PL01->NOTIFY(?'Re-order?2021-11-30'?).SKIP?2."刪除一個觀察者GO_INV_MGMT_PL01->DELETE(?'1001'?).SKIP?2."庫存再次發生變化時,通知相關的觀察者進行處理GO_INV_MGMT_PL01->NOTIFY(?'Re-order?2021-12-20'?).CATCH?CX_SY_CREATE_OBJECT_ERROR?INTO?EXC_REF.EXC_TEXT?=?EXC_REF->GET_TEXT(?).WRITE?:?/?EXC_TEXT. ENDTRY.

【示例】

利用ABAP的事件(Event)功能,也能得到同樣的效果。

創建被觀察者類“ZCL_SUBJECT”,創建事件“STATUS_CHANGED”,創建方法“CHANGE_STATUS”,在方法中引發該事件。

創建觀察者類“ZCL_OBSERVER”,并添加方法“ACTION_ON_SUBJECT_CHANGED”,在“細目視圖”中設定該方法是被觀察者類“ZCL_SUBJECT”的事件“STATUS_CHANGED”的處理方法。

添加測試程序。

*&---------------------------------------------------------------------* *&?Report??ZREP_CLS_C04 *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------*REPORT?ZREP_CLS_C04.DATA?:?GO_SUBJECT?TYPE?REF?TO?ZCL_SUBJECT,GO_OBSERVER1?TYPE?REF?TO?ZCL_OBSERVER,GO_OBSERVER2?TYPE?REF?TO?ZCL_OBSERVER."創建被觀察者對象 CREATE?OBJECT?GO_SUBJECT."創建觀察者對象 CREATE?OBJECT?GO_OBSERVER1. CREATE?OBJECT?GO_OBSERVER2."設定觀察者的事件句柄指向被觀察者 SET?HANDLER?GO_OBSERVER1->ACTION_ON_SUBJECT_CHANGED?FOR?GO_SUBJECT. SET?HANDLER?GO_OBSERVER2->ACTION_ON_SUBJECT_CHANGED?FOR?GO_SUBJECT."被觀察者狀態改變 GO_SUBJECT->CHANGE_STATUS(?).

總結

以上是生活随笔為你收集整理的【学习笔记】ABAP OOD设计模式 - 观察者模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。