【问题标题】:Design pattern to structure game programming code构建游戏编程代码的设计模式
【发布时间】: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()

这是不允许的,但有没有办法做到这一点?

另外,由于构造函数正在调用类,可以使用工厂方法,它在运行时根据我自己的理解选择要执行的类。我只能想象,但在这种情况下它会如何应用?

谢谢!

【问题讨论】:

    标签: python design-patterns


    【解决方案1】:

    您似乎误解了工厂模式和外观模式的目的。

    工厂模式用于构建事物。所以你会有一个CharacterFactory 和一个WindowFactory。如果客户需要特殊字符,他们需要一种方法将您的默认 CharacterFactory 替换为他们的。

    字符工厂应该能够生成不同类型的字符。这样,您可以为您的游戏构建默认的好人和坏人。然后客户可以覆盖这些方法来修改默认值。

    外观用于使对象看起来好像是不同的类型。所以你的窗口可能有一个View 类型的子窗口。 CharacterView 将是一个外观,它将来自角色的信息映射到 View 界面的数据中,然后窗口可以使用该界面来显示健康等信息,而无需了解角色或健康状况。

    这意味着您还需要一个包含默认工厂的配置对象。客户从ConfigFactory 获得其中之一。

    class ConfigFactory:
        def createConfig(self):
            config = Config()
            config.characterFactory = self.createCharacterFactory()
            return config
    
        def createCharacterFactory(self):
            return CharacterFactory()
    

    客户将覆盖它以获得自己的工厂:

    class CustomConfigFactory(ConfigFactory):
        def createCharacterFactory(self):
            return CustomCharacterFactory()
    

    【讨论】:

    • 是的。您的示例不是外观,它是工厂、配置工厂和配置的混合体,外加一个活动扳手。
    • 哈哈!好的,谢谢你的信息,我需要这个解释更有说服力,我会继续寻找和理解!
    • “抽象级别”的意思是“相互独立”。您所做的是尝试将 everyting 移动到 Facade 类中,而不是创建独立的部分,然后将它们连接在一起。
    • 我已经厌倦了应用 this:en.wikipedia.org/wiki/Facade_pattern 文章建议的内容,示例(计算机外观)是用 java 编写的,我就是这样做的。所以我的类是窗口和字符,其中定义了方法。像字符:旋转、移动和窗口:setbackground_image。然后我使用对象创建它来调用外观中的方法。
    • 但是文章明确指出,一个门面应该只有几个方法(通常是1-2个)。
    猜你喜欢
    • 2023-03-24
    • 2010-12-13
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 2012-09-01
    • 1970-01-01
    相关资源
    最近更新 更多