
代码示例:
以下是 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.
代码解析
- 目标接口(Target):定义了客户端期望使用的接口,即
request方法。 - 适配者类(Adaptee):是一个已存在的类,其接口与目标接口不兼容,但具有客户端需要的功能。
- 适配器类(Adapter):继承自目标接口类
Target,并在初始化时接收一个Adaptee实例。适配器类重写了request方法,在该方法中调用Adaptee的specific_request方法,并对返回值进行处理,使其符合客户端期望的格式。 - 客户端代码:通过调用目标接口的方法来使用适配器,而无需直接与适配者类交互。
更多技术文章见公众号: 大城市小农民

8947

被折叠的 条评论
为什么被折叠?



