首页 > 解决方案 > Python中的“鸭子打字”也是一种“外观设计模式”吗?

问题描述

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

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

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

标签: pythonclassdesign-patternsfacade

解决方案


外观通过单个接口提供抽象

你在这里没有抽象任何东西,只是定义了两个独立的实例方法,可以用任何 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) 

如果您定义了一个抽象基类,那么您将使用继承与子类,但仍然不是外观

在您的情况下,外观的一个示例是某些运营商将呼叫/消息(通过单个接口)路由到任何“移动设备”,其中移动设备可能具有完全不同的联系方式(contact()可以定义为抽象功能)一个父类)


推荐阅读