首页 技术 正文
技术 2022年11月19日
0 收藏 487 点赞 3,102 浏览 2215 个字

计算机科学中的大多数问题都可以通过增加一层间接性来解决。  ——David Wheeler

适配器模式(Adapter Design Pattern),是一个广泛应用于真实世界和面向对象编程语言的设计模式。基于面向对象的标准SAP程序中同样很多地使用了适配器模式。

适配器是什么?

适配器把因为不同的“接口”而不兼容的对象转换(为兼容的)。通过实现适配器,我们可以让一些原本不能共同工作的类共同工作。

有时,我们有一个客户端,它希望对象只有一个确定的接口。还有一个对象,他能满足功能上的要求,但是两个对象的接口是不同的。因此,我们不能直接通过相同的接口调用现存的对象。所以,我们需要创建一种“包装”来把对象的接口转换为可以被另一个客户端或者对象所接受的接口。

听起来有点耳熟?是的,我们在很多情况下使用这种包装——无论是真实世界还是编程。在真实世界,我们使用通过USB接口工作的Mini SD卡读取器,从而读取数据。在ABAP里面,标准的SAP程序中的大部分BAPI FM会用到它。

适配器的UML

下图是本文的适配器示例的UML图:

ABAP设计模式——适配器

有个简单的输出类来实现LIF_OUTPUT。客户端使用接口LIF_OUTPUT来和输出类交互。让我们看看适配器是如何实现的:

  • LIF_OUTPUT——客户端只接受使和实现了该接口的对象一起工作。因此,所有的需要和客户端交互的对象必须实现该接口。该组件叫做“Target”.
  • TREE_OUTPUT——这是一个没有实现相应接口的对象。但是该对象满足了我们对于生成树的所有需求。该组件叫做“Adaptee”.
  • NEW_COMPLEX_OP——这是一个新的对象,扮演实现了LIF_OUTPUT的TREE_OUTPUT的包装者的角色。所以,客户端可以通过同样的接口无缝生成复杂输出(TREE).它叫做“Adapter”.

SALV模型使用了适配器模式来通过SALV的兼容接口来将属性映射到Classical ALV或者ALV Grid的属性上。

代码

使用OO ABAP实现适配器的代码:

REPORT ZNP_DP_ADAPTER.
*
INTERFACE lif_output.
METHODS: generate_output.
ENDINTERFACE. "lif_output
*
CLASS simple_op DEFINITION.
PUBLIC SECTION.
INTERFACES: lif_output.
ENDCLASS. "simple_op DEFINITION
*
CLASS simple_op IMPLEMENTATION.
METHOD lif_output~generate_output.
WRITE: / 'Simple Output - just using WRITE'.
ENDMETHOD. "lif_output~generate_output
ENDCLASS. "simple_op IMPLEMENTATION
*
CLASS tree_output DEFINITION.
PUBLIC SECTION.
METHODS: generate_tree.
ENDCLASS. "tree_output DEFINITION
*
CLASS tree_output IMPLEMENTATION.
METHOD generate_tree.
WRITE: / 'Creating Tree ... using CL_GUI_ALV_TREE'.
ENDMETHOD. "generate_tree
ENDCLASS. "tree_output IMPLEMENTATION
*
CLASS new_complex_op DEFINITION.
PUBLIC SECTION.
INTERFACES: lif_output.
ENDCLASS. "new_complex_op DEFINITION
*
CLASS new_complex_op IMPLEMENTATION.
METHOD lif_output~generate_output.
DATA: o_tree_op TYPE REF TO tree_output.
CREATE OBJECT o_tree_op.
o_tree_op->generate_tree( ).
ENDMETHOD. "lif_output~generate_output
ENDCLASS. "new_complex_op IMPLEMENTATION
*
START-OF-SELECTION.
DATA: o_op TYPE REF TO lif_output.
CREATE OBJECT o_op TYPE simple_op.
o_op->generate_output( ).* using the same "simple" Interface to perform the "complex",
* Since Client only wants to use Simple interface ..
CREATE OBJECT o_op TYPE new_complex_op.
o_op->generate_output( ).

设计时的考虑

在实现适配器的时候,我们需要考虑以下内容:

  • 创建一个类,实现客户端需要的接口
  • 实例化接口兼容的对象
  • 在接口的实现方法中调用相应的方法以执行操作

如果你已经实现了这个设计模式,并且理解了它的好处,请告诉我。

原文标题:ABAP Objects Design Patterns – Adapter

本文链接:http://www.cnblogs.com/hhelibeb/p/7041300.html

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,082
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,556
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,406
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,179
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,815
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,898