#介面卡模式
'''將乙個類的介面轉換成客戶希望的另外乙個介面。adapter模式使得原本由於接
口不相容而不能一起工作的那些類可以一起工作。'''
'''適用場景:
1、已經存在的類的介面不符合我們的需求;
2、建立乙個可以復用的類,使得該類可以與其他不相關的類或不可預見的類(即那些介面可能不一定相容的類)協同工作;
3、在不對每乙個都進行子類化以匹配它們的介面的情況下,使用一些已經存在的子類。
'''#待適配類
class assassin(object):
def __init__(self):
self.name = "assassin"
self.weapon = "katana"
def assassinate(self):
return 'i will use my [%s] to attack!' \
% self.weapon
class guard(object):
def __init__(self):
self.name = "guard"
self.weapon = "sword"
def attack(self):
return 'i will use my [%s] to attack!' \
% self.weapon
class archer(object):
def __init__(self):
self.name = "archer"
self.weapon = "bow"
def shoot(self):
return 'i will use my [%s] to attack!' % \
self.weapon
#介面卡
class adapter(object):
'''adapts an object by replacing methods.
usage:
guard = guard()
guard = adapter(guard,dict(attack = guard.attack))
'''def __init__(self,obj,adapted_methods): #更改和環境不一致的介面
self.obj = obj
self.__dict__.update(adapted_methods)
#如果介面卡類物件沒有此方法,那就呼叫__getattr__方法,
#在原待適配類物件中找這個方法或屬性
def __getattr__(self,attr):
return getattr(self.obj,attr)
def main():
killers =
assassin = assassin()
guard = guard()
archer = archer()
for killer in killers :
print killer.name,'--->',killer.attack()
if __name__ == '__main__':
main()
設計模式 介面卡模式 類介面卡 物件介面卡
乙個小例子,便於理解,上 這是我們造的。現在想用這個方法。public class adaptee 類介面卡。對我們想要的方法封裝一下,target就能像之前一樣,呼叫request方法即可。public class adapter1 extends adaptee implements targe...
設計模式之介面卡模式(類介面卡模式)
介面卡模式,即定義乙個包裝類,用於包裝不相容介面的物件 包裝類 介面卡adapter 被包裝物件 適配者adaptee 被適配的類 把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本介面不匹配而無法一起工作的兩個類能夠在一起工作。介面卡模式的形式分為 類的介面卡模式和物件的介面卡模式 模式原理...
設計模式 介面卡模式
01 02 author rollen holt 設計模式之 介面卡模式 03 04 05 inte ce window 11 12 abstract class windowadapter 16 public void close 19 public void activated 22 publi...