【发布时间】:2023-03-07 20:10:01
【问题描述】:
我正在编写一个库,我想以一种潜在用户发现它易于使用该库的方式来构建我的代码。我看过 this 优秀的 API 设计视频。黄金法则之一是拥有良好的设计模式。我有两个想法。 外观设计模式和工厂设计模式。这两种设计模式都用于在程序代码中实现高度抽象,以供用户使用。
我发现申请哪一个或两者都申请非常困难。当然,我想避免反模式。
我使用的语言是 Python,它与上面提供的视频链接中强调的 Java 完全不同。 我的图书馆将如何运作:
Character class
Window class
可以创建许多角色对象。
假设我要使用外观设计模式,我会在外观构造函数中初始化这两个类,以便可以在方法中调用它们:
类 Facade():
__init__(self): self.character = Character() self.window = Window()
在这里,我将创建表示在字符和窗口类中创建的方法的方法。然后用户可以轻松调用它们:
Facade = Facade()
Facade.methodUsedInCharacterClass()
Facade.methodUsedInCharacterClass()
Facade.methodUsedInWindowClass()
但在这里我看到外观有问题,你可以有两个不同的角色,你会想要做不同的事情。你可以这样做:
Facade = Facade()
badguy= Facade.methodUsedInCharacterClass()
goodguy= Facade.methodUsedInCharacterClass()
Facade.methodUsedInWindowClass()
然后您不能使用 badguy 或 goodguy 变量来调用其他行为,例如
badguy.rotate()
goodguy.jump()
这是不允许的,但有没有办法做到这一点?
另外,由于构造函数正在调用类,可以使用工厂方法,它在运行时根据我自己的理解选择要执行的类。我只能想象,但在这种情况下它会如何应用?
谢谢!
【问题讨论】: