鍍金池/ 教程/ Python/ 適配器設(shè)計(jì)模式
反模式
隊(duì)列
適配器設(shè)計(jì)模式
享元設(shè)計(jì)模式
Python設(shè)計(jì)模式
工廠模式
模板設(shè)計(jì)模式
構(gòu)建器(Builder)設(shè)計(jì)模式
Python設(shè)計(jì)模式概要
命令設(shè)計(jì)模式
Python設(shè)計(jì)模式簡(jiǎn)介
觀察者設(shè)計(jì)模式
代理設(shè)計(jì)模式
異常處理
責(zé)任鏈設(shè)計(jì)模式
字典實(shí)現(xiàn)
抽象工廠設(shè)計(jì)模式
Python并發(fā)(多線程)
策略設(shè)計(jì)模式
門(mén)面(Facade)設(shè)計(jì)模式
原型設(shè)計(jì)模式
迭代器設(shè)計(jì)模式
集合
單例模式
列表數(shù)據(jù)結(jié)構(gòu)
狀態(tài)設(shè)計(jì)模式
模型視圖控制器(MVC)模式
裝飾器設(shè)計(jì)模式
面向?qū)ο蟾拍畹膶?shí)現(xiàn)
面向?qū)ο笤O(shè)計(jì)模式
字符串和序列化

適配器設(shè)計(jì)模式

適配器模式可用作兩個(gè)不兼容接口之間的橋梁。 這種類(lèi)型的設(shè)計(jì)模式屬于結(jié)構(gòu)模式,因?yàn)榇四J浇Y(jié)合了兩個(gè)獨(dú)立接口的功能。

這種模式涉及一個(gè)類(lèi),它負(fù)責(zé)連接獨(dú)立或不兼容接口的功能。 一個(gè)現(xiàn)實(shí)的例子是讀卡器,它是存儲(chǔ)卡和筆記本電腦之間的適配器。 您將存儲(chǔ)卡插入讀卡器,將讀卡器插入筆記本電腦,以便通過(guò)筆記本電腦讀取存儲(chǔ)卡。

適配器設(shè)計(jì)模式有助于類(lèi)能在一起工作。 它根據(jù)需求將一個(gè)類(lèi)的接口轉(zhuǎn)換為另一個(gè)接口。 該模式包括一個(gè)多態(tài)性,它命名一個(gè)名稱(chēng)和多個(gè)形式。 根據(jù)收集到的要求,生成一個(gè)使用的形狀類(lèi)。

適配器模式有兩種類(lèi)型 -

  • 對(duì)象適配器模式 - 這種設(shè)計(jì)模式依賴(lài)于對(duì)象實(shí)現(xiàn)。 因此,它被稱(chēng)為對(duì)象適配器模式。
  • 類(lèi)適配器模式 - 這是實(shí)現(xiàn)適配器設(shè)計(jì)模式的另一種方式。 該模式可以使用多重繼承來(lái)實(shí)現(xiàn)。

如何實(shí)現(xiàn)適配器模式?

現(xiàn)在讓我們看看如何實(shí)現(xiàn)適配器模式。參考以下代碼 -

class EuropeanSocketInterface:
   def voltage(self): pass

   def live(self): pass
   def neutral(self): pass
   def earth(self): pass

# Adaptee
class Socket(EuropeanSocketInterface):
   def voltage(self):
      return 230

    def live(self):
      return 1

   def neutral(self):
      return -1

   def earth(self):
      return 0

# Target interface
class USASocketInterface:
   def voltage(self): pass
   def live(self): pass
   def neutral(self): pass

# The Adapter
class Adapter(USASocketInterface):
   __socket = None
   def __init__(self, socket):
      self.__socket = socket

   def voltage(self):
      return 110

   def live(self):
      return self.__socket.live()

   def neutral(self):
      return self.__socket.neutral()

# Client
class ElectricKettle:
   __power = None

   def __init__(self, power):
       self.__power = power

   def boil(self):
      if self.__power.voltage() > 110:
         print "Kettle on fire!"
      else:
         if self.__power.live() == 1 and \
            self.__power.neutral() == -1:
            print "Coffee time!"
         else:
            print "No power."

def main():
   # Plug in
   socket = Socket()
   adapter = Adapter(socket)
   kettle = ElectricKettle(adapter)

   # Make coffee
   kettle.boil()

   return 0

if __name__ == "__main__":
   main()

執(zhí)行上面示例代碼,得到以上結(jié)果 -

說(shuō)明:代碼包括具有各種參數(shù)和屬性的適配器接口。 它包括AdapteeTarget接口,它實(shí)現(xiàn)所有屬性并將輸出顯示為可見(jiàn)。