Python中的“duck-typing”也是“Facade设计模式”吗?

2024-05-16 05:15:53 发布

您现在位置:Python中文网/ 问答频道 /正文

当我们能够从不同的类调用一个函数时,它会被视为Facade设计模式吗

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())

在上面的代码中,我们对这两个类使用相同的函数。这会被视为一种立面设计模式吗


Tags: 函数nameselfinfosizereturninitdef
1条回答
网友
1楼 · 发布于 2024-05-16 05:15:53

立面通过单个接口提供抽象

这里并没有抽象任何东西,只是定义了两个独立的实例方法,这可以在任何OOP语言中完成,所以duck类型是不相关的

请注意,您的类是完全相同的,因此您不需要两个类,只需要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) 

如果您定义了一个abstract base class,那么您将对子类使用继承,而不是façade

在您的案例中,Façade的一个例子是一些运营商(通过单个接口)将呼叫/消息路由到任何“移动设备”,移动设备可以有完全不同的联系方式(可以定义为父类中的抽象函数)

相关问题 更多 >