簡體   English   中英

Python 中的“鴨子打字”也是“立面設計模式”嗎?

[英]Is 'duck typing' in Python also a 'Facade Design Pattern'?

每當我們能夠從不同的類中調用一個 function 時,它會被視為外觀設計模式嗎?

class Mobile:
    def __init__(self, name, ram, memory):
        self.name = name
        self.ram = ram
        self.memory = memory
    
    def info(self):
        return self.name, self.ram, self.memory
    
class Printer:
    def __init__(self, name, size, color):
        self.name = name
        self.size= size
        self.color= color
    
    def info(self):
        return self.name, self.size, self.color
    
    
mob = Mobile("Dark", 8, 128)        
prt = Printer("Alpine", '4-5', 'white')   

print(mob.info())
print(prt.info())

在上面的代碼中,我們對兩個類使用相同的 function。 這會被視為外觀設計模式嗎?

外觀通過單個接口提供抽象

你這里沒有抽象任何東西,只是定義了兩個獨立的實例方法,可以用任何 OOP 語言完成,所以鴨子類型是無關緊要的

請注意,您的課程完全相同,因此您不需要兩個課程,只需class Mobile兩個實例

class Mobile:
    def __init__(self, name, ram, memory):
        self.name = name
        self.ram = ram
        self.memory = memory
    
    def info(self):
        return self.name, self.ram, self.memory    
    
    
mob1 = Mobile("Dark", 8, 128)        
mob2 = Mobile("Alpine", 16, 128) 

如果您定義了一個抽象基礎 class ,那么您將使用 inheritance 和子類,但仍然不是外觀

在您的情況下,外觀的一個示例是某些運營商將呼叫/消息(通過單個界面)路由到任何“移動設備”,其中移動設備可能具有完全不同的聯系方式(其中contact()可以定義為父類中的抽象 function)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM