结构型模式
总的来说就是控制几个类组成什么结构,怎么协同工作的模式
适配器模式
就像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)