Ruby设计模式编程之适配器模式实战攻略例子解析

在这里插入图片描述

代码示例:

以下是 Ruby 中适配器模式的详细例子:

场景描述

假设有一个客户端代码,期望调用 request 方法,但现有类 Adaptee 的方法名为 specific_request,且返回值格式也不符合客户端需求。此时可以使用适配器模式,创建一个适配器类 Adapter,将 Adaptee 的接口适配为客户端期望的接口。

代码实现

目标接口(Target)
class Target
  def request
    "Target: The default target's behavior."
  end
end
适配者类(Adaptee)
class Adaptee
  def specific_request
    ".eetpadA eht fo roivaheb laicepS"
  end
end
适配器类(Adapter)
class Adapter < Target
  def initialize(adaptee)
    @adaptee = adaptee
  end

  def request
    "Adapter: (TRANSLATED) #{@adaptee.specific_request.reverse}"
  end
end
客户端代码
def client_code(target)
  print target.request
end

puts 'Client: I can work just fine with the Target objects:'
target = Target.new
client_code(target)
puts "\n\n"

adaptee = Adaptee.new
puts 'Client: The Adaptee class has a weird interface. See, I don\'t understand it:'
puts "Adaptee: #{adaptee.specific_request}"
puts "\n"

puts 'Client: But I can work with it via the Adapter:'
adapter = Adapter.new(adaptee)
client_code(adapter)

执行结果

Client: I can work just fine with the Target objects:
Target: The default target's behavior.

Client: The Adaptee class has a weird interface. See, I don't understand it:
Adaptee: .eetpadA eht fo roivaheb laicepS

Client: But I can work with it via the Adapter:
Adapter: (TRANSLATED) Special behavior of the Adaptee.

代码解析

  1. 目标接口(Target):定义了客户端期望使用的接口,即 request 方法。
  2. 适配者类(Adaptee):是一个已存在的类,其接口与目标接口不兼容,但具有客户端需要的功能。
  3. 适配器类(Adapter):继承自目标接口类 Target,并在初始化时接收一个 Adaptee 实例。适配器类重写了 request 方法,在该方法中调用 Adapteespecific_request 方法,并对返回值进行处理,使其符合客户端期望的格式。
  4. 客户端代码:通过调用目标接口的方法来使用适配器,而无需直接与适配者类交互。
    更多技术文章见公众号: 大城市小农民
    在这里插入图片描述
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乔丹搞IT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值