zoukankan      html  css  js  c++  java
  • 适配器模式

    模式定义:将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(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)
    
  • 相关阅读:
    Spring Boot Devtools 热部署依赖
    SpringBoot 整合 thymeleaf
    spring boot 静态资源的映射规则 (3) 欢迎页面映射
    spring boot 静态资源的映射规则 (2) 替他资源映射
    spring boot 静态资源的映射规则 (1) webjars 资源映射
    css初始化minireset.css
    php递归函数细节
    php的递归函数示例
    php正则字符串提取汉字
    Javascript中的Callback方法浅析
  • 原文地址:https://www.cnblogs.com/zenan/p/10329945.html
Copyright © 2011-2022 走看看