适配器模式

模式定义:将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(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)

 

posted @ 2019-01-28 13:52  家迪的家  阅读(146)  评论(0编辑  收藏  举报