菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
189
0

适配器模式

原创
05/13 14:22
阅读数 31393

模式定义:将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。

模式结构:

  • Target:目标抽象类
  • Adapter:适配器类
  • Adaptee:适配者类
  • Client:客户类

显著的优点:一个适配器可以适配多个适配者到同一目标。

场景介绍:由于国内外插座标准不一,导致德国插座无法给我们充电。

python实现:

from abc import ABCMeta, abstractmethod


class GermanySocketInterface(metaclass=ABCMeta):
    """德国插座标准"""
    @abstractmethod
    def circle_socket(self):
        """圆孔插座"""


class ChinaSocketInterface(metaclass=ABCMeta):
    """国标插座标准"""
    @abstractmethod
    def rectangle_socket(self):
        """矩形插座"""


class GermanySocket(GermanySocketInterface):
    def circle_socket(self):
        print("使用圆孔插座充电")


class ChinaSocket(ChinaSocketInterface):
    def rectangle_socket(self):
        print("使用矩形插座充电")


class GermanyHotel:
    """德国旅馆"""
    def __init__(self):
        pass

    def charging(self,GermanySocketInterfaceObj):
        self._GermanySocketInterfaceObj = GermanySocketInterfaceObj
        self._GermanySocketInterfaceObj.circle_socket()


class SocketAdapter(GermanySocketInterface):
    """适配器"""
    def __init__(self,ChinaSocketInterfaceObj):
        self._ChinaSocketInterfaceObj = ChinaSocketInterfaceObj

    def circle_socket(self):
        self._ChinaSocketInterfaceObj.rectangle_socket()


if __name__ == "__main__":
    # first
    # gs = GermanySocket()
    # gh = GermanyHotel()
    # gh.charging(gs)

    cs = ChinaSocket()
    gh = GermanyHotel()
    sa = SocketAdapter(cs)
    gh.charging(sa)

 

发表评论

0/200
189 点赞
0 评论
收藏
为你推荐 换一批