ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

结构型模式

2019-02-19 08:52:26  阅读:313  来源: 互联网

标签:money self 模式 pay 适配器 class def 结构型


  结构型模式:适配器模式、桥模式、组合模式、装饰模式、外观模式、享元模式、代理模式。

一、适配器模式

  将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的的那些类可以一起工作。

1、适配器模式实现

(1)类适配器:使用多继承

from abc import ABCMeta, abstractmethod


class Payment(metaclass=ABCMeta):
    # abstract class
    @abstractmethod
    def pay(self, money):
        pass

class Alipay(Payment):
    def pay(self, money):
        print("支付宝支付%d元." % money)

class WechatPay(Payment):
    def pay(self, money):
        print("微信支付%d元." % money)

class BankPay:
    def cost(self, money):   # 没有使用pay方法
        print("银联支付%d元." % money)

# 第一种适配器模式:使用多继承
class NewBankPay(Payment, BankPay):
    def pay(self, money):   # 把本来不兼容的接口cost转为兼容的接口pay
        self.cost(money)

p = NewBankPay()
p.pay(100)   # 银联支付100元.

  使用这种适配器模式,就将本来不兼容的接口cost转变为兼容的接口pay。

(2)对象适配器:使用组合

  组合:在一个类里放入另外一个类的对象。

class A:
    pass
class B:
    def __init__(self):
        self.a = A()

  根据组合来实现代码复用,实现多个不兼容接口的适配:

from abc import ABCMeta, abstractmethod

class Payment(metaclass=ABCMeta):
    # abstract class
    @abstractmethod
    def pay(self, money):
        pass

class Alipay(Payment):
    def pay(self, money):
        print("支付宝支付%d元." % money)

class WechatPay(Payment):
    def pay(self, money):
        print("微信支付%d元." % money)

class BankPay:
    def cost(self, money):   # 没有使用pay方法
        print("银联支付%d元." % money)

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

# 第一种适配器模式:使用多继承
# class NewBankPay(Payment, BankPay):
#     def pay(self, money):   # 把本来不兼容的接口cost转为兼容的接口pay
#         self.cost(money)

# 第二种适配器模式:使用组合
class PaymentAdapter(Payment):
    def __init__(self, payment):
        self.payment = payment

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

p = PaymentAdapter(ApplePay())   # 使用适配器进行苹果支付
p.pay(100)   # 苹果支付100元

  这种使用组合来实现的适配器模式就叫做对象适配器。

2、适配器模式总结

角色:

  • 目标接口(Target)
  • 待适配的类(Adaptee)
  • 适配器(Adapter)

适用场景:

  • 想使用一个已经存在的类,而它的接口不符合你的要求。
  • (对象适配器)想使用一些已经存在的子类,但不可能对每一个都进行子类化以匹配它们的接口,对象适配器可以适配它的父类接口。

 

标签:money,self,模式,pay,适配器,class,def,结构型
来源: https://www.cnblogs.com/xiugeng/p/10399029.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有