日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

【学习笔记】ABAP OOD设计模式 - 桥接模式

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

ABAP OOD設計模式 - 橋接模式

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

橋接模式又稱為橋梁模式,在程序開發中,采用不同的維度分解一系列對象,然后采用組合的方式,根據需要靈活組合,這個過程就是解耦和提高靈活度的過程,也就是所謂的橋接模式。

其中,

Abstraction為抽象化角色,定義出該角色的行為,同時保存一個對實現化角色的引用;

Implementor是實現化角色,它是接口或者抽象類,定義角色必需的行為和屬性;

RefinedAbstraction為修正抽象化角色,引用實現化角色對抽象化角色進行修正;ConcreteImplementor為具體實現化角色,實現接口或抽象類定義的方法或屬性。

當一個對象具有多個變化因素的時候,需要考慮依賴于抽象的實現,而不是具體的實現。

當多個變化因素在多個對象間共享時,需要考慮變化的部分抽象出來再進行聚合/合成。

將實現抽離出來,再實現抽象,使得對象的具體實現依賴于抽象,這樣符合依賴倒置原則和合成復用原則。

【示例】

比如生產訂單下達,針對不同的訂單類型,需要打印多個文檔,比如揀貨單、操作控制單等。有的類型只需要打印一個文檔,有的類型則需要打印多個文檔,如果按照訂單類型和文檔類型直接進行分類,則大致設計的結構如下圖所示。

這樣的結構充滿了冗余而且非常不易于擴展,而且文檔類型和訂單類型其實并不是繼承關系,而是包含關系,那么如何用橋接方式來進行改造呢?

創建訂單輸出文檔接口“ZIF_PROD_ORDER_OUTPUT”,并定義方法“PRINT_OUTPUT”。

創建實現接口類“ZCL_PICK_LIST”和“ZCL_OPER_CONTROL_TICKET”,實現接口方法邏輯中輸入打印控制的邏輯。

創建抽象類“ZCL_PROD_ORDER”,并定義方法“PRINT_ORDER_DOCUMENT”,設定傳入參數“II_PROD_ORDER_OUTPUT”,其類型為接口“ZIF_PROD_ORDER_OUTPUT”,不需要設定具體的實現邏輯。

創建繼承的子類“ZCL_PROD_ORDER_PP01”和“ZCL_PROD_ORDER_PP02”代表訂單類型PP01和PP02,并重新定義邏輯。

調用測試代碼,實現簡單的橋接模式。

*&---------------------------------------------------------------------*
*&?Report??ZREP_CLS_C07
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT?ZREP_CLS_C07.

DATA?:?EXC_REF?TYPE?REF?TO?CX_ROOT,
???????EXC_TEXT?TYPE?STRING,
???????LV_ORDER_TYPE1?TYPE?STRING,
???????LV_ORDER_TYPE2?TYPE?STRING,
???????LV_DOC_CLASS1?TYPE?STRING,
???????LV_DOC_CLASS2?TYPE?STRING,
???????GO_PROD_ORDER?TYPE?REF?TO?ZCL_PROD_ORDER,
???????GO_PROD_ORDER_OUTPUT?TYPE?REF?TO?ZIF_PROD_ORDER_OUTPUT.

"設定類名:必須大寫??兩個生產訂單類型?和?兩個打印單據
LV_ORDER_TYPE1?=?'ZCL_PROD_ORDER_PP01'.
LV_ORDER_TYPE2?=?'ZCL_PROD_ORDER_PP02'.
LV_DOC_CLASS1?=?'ZCL_PICK_LIST'.
LV_DOC_CLASS2?=?'ZCL_OPER_CONTROL_TICKET'.

TRY.
????"動態創建類,對生產訂單類型和打印單據進行靈活組合

????"1、生產訂單類型PP01?與兩種單據的組合
????CREATE?OBJECT?GO_PROD_ORDER?TYPE?(LV_ORDER_TYPE1).
????CREATE?OBJECT?GO_PROD_ORDER_OUTPUT?TYPE?(LV_DOC_CLASS1).
????GO_PROD_ORDER->PRINT_ORDER_DOCUMENT(?GO_PROD_ORDER_OUTPUT?).
????CREATE?OBJECT?GO_PROD_ORDER_OUTPUT?TYPE?(LV_DOC_CLASS2).
????GO_PROD_ORDER->PRINT_ORDER_DOCUMENT(?GO_PROD_ORDER_OUTPUT?).

????SKIP?2.
????"2、生產訂單類型PP02?與一種單據的組合
????CREATE?OBJECT?GO_PROD_ORDER?TYPE?(LV_ORDER_TYPE2).
????CREATE?OBJECT?GO_PROD_ORDER_OUTPUT?TYPE?(LV_DOC_CLASS1).
????GO_PROD_ORDER->PRINT_ORDER_DOCUMENT(?GO_PROD_ORDER_OUTPUT?).

??CATCH?CX_SY_CREATE_OBJECT_ERROR?INTO?EXC_REF.
????EXC_TEXT?=?EXC_REF->GET_TEXT(?).
????WRITE?:?/?EXC_TEXT.
ENDTRY.

總結

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

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