设计模式-结构型模式开端-适配器模式

结构型模式

总的来说就是控制几个类组成什么结构,怎么协同工作的模式

适配器模式

就像type-c转耳机孔,usb转苹果的那些硬件一样,为了让两个不通的设备通用
适配器模式就是让两个不能通用的设备通用

两种实现方式

  • 类适配器:使用多继承
  • 对象适配器:使用组合

举例

  • 类适配器
from abc import ABCMeta,abstractmethod

class payment(object):
	__metaclass__ =  ABCMeta
	@abstractmethod
	def pay(self,money):
		pass

class AliPay(payment):
	def pay(self,money):
		print "支付宝支付%d" % money
		pass

class WeChatPay(payment):
	def pay(self,money):
		pass

#假如合并两个系统
class BankPay(object):
	#和原来的系统中pay接口不兼容,需要使用适配器
	def cost(self,money):
		print "银行卡支付%d元" % money

#类适配器
class BankPayNew(payment,BankPay):
	#重写pay
	def pay(self,money):
		#使用BankPay的cost接口
		self.cost(money)
  • 对象适配器
class payment(object):
	__metaclass__ =  ABCMeta
	@abstractmethod
	def pay(self,money):
		pass

class AliPay(payment):
	def pay(self,money):
		print "支付宝支付%d" % money
		pass

class WeChatPay(payment):
	def pay(self,money):
		pass

#假如合并两个系统
class BankPay(object):
	#和原来的系统中pay接口不兼容,需要使用适配器
	def cost(self,money):
		print "银行卡支付%d元" % money

class ApplePay(object):
	def cost(self,money):
		print "苹果支付%d元" % money

#这里如果再使用类适配器,就要再写一个新的applePay的适配器接口类,很麻烦,或者继承一堆,不好维护
#所以使用对象适配器
class PaymentAdopter(payment):
	def __init__(self,new_payment):
		#组合,把另一个类的实例对象储存在这个类里,方便调用接口
		self.new_payment = new_payment

	def pay(self, money):
		self.new_payment.cost(money)

#client
p = PaymentAdopter(ApplePay())
#这里client调用就可以使用同一的接口了,实现了适配
p.pay(100)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值