问题描述
每当我们能够从不同的类中调用一个函数时,它是否被认为是 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,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())
在上面的代码中,我们对两个类使用相同的函数。这会被视为外观设计模式吗?
解决方法
立面通过单个接口提供抽象
你在这里没有抽象任何东西,只是定义了两个独立的实例方法,可以在任何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)
如果您定义了 abstract base class,那么您将使用继承与子类,而不是外观
在您的案例中,Façade 的一个示例是一些运营商将呼叫/消息(通过单个界面)路由到任何“移动设备”,其中移动设备可以通过完全不同的方式联系他们(contact()
可以定义为父类中的抽象函数)