想要什么适配什么?

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 想要什么适配什么?

点击上方”python宝典”,关注获取python全套视频,

技术文章第一时间送达!

适配器模式

1、内容

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

2、角色

  • 目标接口(Target)
  • 待适配的类(Adaptee)
  • 适配器(Adapter)
  • 3、使用场景

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

  • 将目标类和适配者类解耦
  • 增加了类的透明性和复用性,将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性
  • 灵活性和扩展性都非常好,符合开闭原则
  • 5、缺点

  • 一次最多只能适配一个适配者类,不能同时适配多个适配者。
  • 适配者类不能为最终类,在C#中不能为sealed类
  • 目标抽象类只能为接口,不能为类,其使用有一定的局限性。

  • 适配者类不能为最终类,在C#中不能为sealed类

    6、两种实现方式

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

  • 7、代码示例

    
    from  abc import abstractmethod,ABCMeta
    class Payment(metaclass=ABCMeta):
        @abstractmethod
        def pay(self,money):
            raise NotImplementedError
    
    class Alipay(Payment):
        def pay(self, money):
            print("支付宝支付%s元"%money)
    
    
    class ApplePay(Payment):
        def pay(self, money):
            print("苹果支付%s元"%money)
    
    # =========待适配器==========
    class WechatPay:
        def huaqian(self,a,b):
            print("微信支付%s元" % (a + b))
    
    # ==========类适配器===========
    class RealWeChatPay(Payment,WechatPay):
        def pay(self,money):
            return self.huaqian(money,0)
    
    
    #===========对象适配器===========
    class PavAdepter(Payment):
        def __init__(self,payment):
            self.payment = payment
            
        def pay(self,money):
            return self.payment.huaqian(money,0)
    
    ######使用=============
    PavAdepter(WechatPay()).pay(100)
    
    想要什么适配什么?

    识别图中二维码,欢迎关注python宝典

    本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

    转载声明:转载请注明出处,本技术博客是本人原创文章

    本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

    原文链接:blog.ouyangsihai.cn >> 想要什么适配什么?


     上一篇
    如何提高代码复用性,定义骨架? 如何提高代码复用性,定义骨架?
    点击上方”python宝典”,关注获取python全套视频, 技术文章第一时间送达! 模板方法模式1、内容 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 2、
    2021-04-05
    下一篇 
    自己不想干,找人干 自己不想干,找人干
    点击上方”python宝典”,关注获取python全套视频, 技术文章第一时间送达! 代理模式1、内容 为其他对象提供一种代理以控制对这个对象的访问。简单的说就是自己不想去干的事情交给代理去干 2、角色 抽象实体 实体 代理
    2021-04-05