结构型模式--适配器模式

定义

适配器模式是一种通过简单的对象组合方式来创造新功能的模式。
对于不兼容的两个接口,我们希望两个接口之间能够通信,因此编写额外的代码层来实现这一目的。这个代码层就叫适配器。
适配器模式经常使用在数据类型转换或者函数功能包装中。比如希望函数拥有更多的参数支持或者实现更复杂的中间过程输出。我们就可以通过编写额外的代码层来实现。
相比起修改源代码,使用适配器具有以下两个优势

  1. 不要求访问他方接口的源代码
  2. 不违反开放/封闭原则

例子

下面列举一个使用适配器来现实统一调用接口的例子。
例子中我们拥有一个可兼容类computer,其具备相应的可兼容方法execute

class Computer(object):
	def __init__(self, name):
		self.name = name
	def __str__(self):
		return "Computer {}".format(self.name)
	def execute(self):
		return "execute function"

同时我们有一个不被兼容的类, 该类因为不具备execute方法,因此不能够被外部接口调用

class Human(object):
	def __init__(self, name):
		self.name = name
	def __str__(self):
		return "Human: {}".format(self.name)
	def play(self):
		return "play function"

我们可以通过定义适配器类来实现对于Human类的适配,使其可以被外部接口所调用

class Adapter(object):
	def __init__(self, obj, adapted_methods):
		self.obj = obj # 需要被适配的类对象
		self.__dict__.update(adapted_methods)
			#需要满足适配的方法

这样我们可以通过调用Adapter来实现对于不兼容类对象的适配。

if __name__ == '__main__':
	human = Human("cool")
	comput = Computer("lucy")
	objects = [comput]
	objects.append(Adapter(human, {execute: human.play})
	for obj in objects:
		print(obj.execute())

这样的适配看起来没有问题,只是这样的适配只是适配了需要适配的部分,而对于未适配的部分并没有实现较好的兼容。这是可以接受的,因为对于接口的调用者并不关心什么部分被适配了,什么没有被适配。

总结

使用适配器模式可以获得API的一致性和接口的兼容性。这样我们可以省去很多时间开发重复代码。
同时在其他语言中,我们通常使用继承的方式来实现接口的兼容性。同时在python中,我们还可以通过装饰器来实现对于类对象行为的扩展。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值