设计模式来构建游戏编程代码

时间:2013-11-13 15:58:40

标签: python design-patterns

我编写了一个库,我希望以一种潜在用户易于使用该库的方式构建我的代码。我查看了this出色的API设计视频。其中一条黄金法则是拥有良好的设计模式。我有两个想法。 Facade design 模式和工厂设计模式。这两个设计模式都用于在程序代码中实现高级抽象,供用户使用。

我觉得它很难或两者都适用。当然,我想避免使用反模板。

我使用的语言是Python,它与Java完全不同,在上面提供的视频链接中强调了这一点。 我的图书馆将如何运作:

Character class
Window class

可以创建许多角色对象。

如果我要使用外观设计模式,我会在外观构造函数中初始化这两个类,以便可以在方法中调用它们:

  

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:1)

你似乎误解了工厂和门面模式的目的。

工厂模式用于构建东西。因此,您将拥有CharacterFactoryWindowFactory。如果客户需要特殊字符,他们需要一种方法来替换您的默认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()