【学习笔记】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设计模式 - 桥接模式相关推荐
- java/android 设计模式学习笔记(8)---桥接模式
这篇博客我们来介绍一下桥接模式(Bridge Pattern),它也是结构型设计模式之一.桥接,顾名思义,就是用来连接两个部分,使得两个部分可以互相通讯或者使用,桥接模式的作用就是为被分离了的抽象部分 ...
- 步步为营 .NET 设计模式学习笔记 十三、Bridge (桥接模式)
概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种"多维度的变化"?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引 ...
- 【学习笔记】ABAP OOD设计模式 - 观察者模式
ABAP OOD设计模式 - 观察者模式 整理转自-<SAP ABAP 面向对象程序设计(原则.模式及实践)> 定义对象间的一对多的依赖关系,当一个对象的状态发生改变时,这个对象相关依赖的 ...
- 【学习笔记】ABAP OOD设计模式 - 单例模式
ABAP OOD设计模式 - 单例模式 整理转自-<SAP ABAP 面向对象程序设计(原则.模式及实践)> 单例模式(Singleton Pattern)是常用的且较为简单的软件设计模式 ...
- 设计模式学习笔记——抽象工厂(Abstract Factory)模式
设计模式学习笔记--抽象工厂(Abstract Factory)模式 @(设计模式)[设计模式, 设计模式中文名, 设计模式英文名] 设计模式学习笔记抽象工厂Abstract Factory模式 基本 ...
- 跟着ZHONGHuan学习设计模式--桥接模式
转载请注明出处! ! !http://blog.csdn.net/zhonghuan1992 全部配套代码均在github上:https://github.com/ZHONGHuanGit/Desig ...
- 【学习笔记】软件设计模式(一)基本概念与归纳总结
软件设计模式之基本概念与归纳总结 本人学习笔记.内容参考<Java设计模式>刘伟 教程配套PPT.仅供学习参考使用. 文章目录 软件设计模式概述 模式的分类 模式定义和特点的归纳总结 1. ...
- 2.设计模式-桥接模式
文章目录 一.使用场景 二.实现方法 三.优势与劣势 四.经典案例 本文笔记来自于: 狂神的设计模式 桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化.它是一种对象结构模型,又称为柄体( ...
- Python设计模式-桥接模式
Python设计模式-桥接模式 基于Python3.5.2,代码如下 #coding:utf-8class Shape():name = ""param = "" ...
最新文章
- Java:使用匿名内部类在方法内部定义并启动线程
- Mathemmatica 新函数
- 国内程序员最容易发音错误的单词集合
- 【java学习笔记】浅析JavaWeb开发中Model1模式和Model2模式
- 利用flask写的接口(base64, 二进制, 上传视频流)+异步+gunicorn部署Flask服务+多gpu卡部署
- 一键洞察全量SQL ,远离性能异常
- 租车信息系统数据库设计(2)
- P2S、P2P、P2SP之对比
- matlab生成摆线齿廓线,基于Matlab的摆线针轮齿廓修形参数的求解
- vue+element表格 苹果自带浏览器兼容问题
- 百度影棒1刷成Android系统,百度影棒2S最简单的刷机方法
- Spring Autowire自动装配(转http://lep1985520.blog.163.com/blog/static/56600480200901441338486/)
- WPF 自定义绘制显示Grid网格线
- 达梦数据库定位阻塞方法举例
- pap认证过程_思科课件8、PAP认证、CHAP认证
- RabbitMQ原理名词解释
- hdmi接口线_网友很困惑:连接显示器,DP光纤线和HDMI光纤线,究竟哪个更好?...
- task6 .OR、IF以及whilemd
- windows10子系统wsl下使用tensorflow2.5.0调用gpu进行训练
- 接口测试工具(上篇)——Postman