2013-11-13 2 views
1

Im программирование библиотеки, я хочу структурировать свой код так, чтобы потенциальные пользователи могли легко использовать эту библиотеку. Я просмотрел this отличное видео отличного дизайна API. Одним из золотых правил является хороший дизайн. Я имею в виду два. Фасадная конструкция patten и заводской дизайн patten. Оба этих шаблона используются для достижения отличного уровня абстракции в программном коде для пользователей.Дизайн шаблона для построения кода программирования игры

Я нахожу его когда-либо настолько трудным, на котором или если оба применяются. Конечно, я бы хотел избежать антипаттенов.

Язык, который я использую, - это Python, который отличается от Java, который подчеркивается в видеосвязи, приведенной выше. Как моя библиотека будет работать:

Character class 
Window class 

Многие объекты символов могут быть созданы.

Скажем, если я должен был использовать шаблон дизайна фасада я бы оба эти классы инициализированы в конструкторе фасада, так что они могут быть вызваны в методах:

класс фасадов():

__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

Возможно, вы неправильно поняли назначение фабричных и фасадных узоров.

Заводской шаблон используется для создания вещей. Таким образом, у вас будет CharacterFactory и WindowFactory. Если у клиентов должны быть специальные символы, им нужен способ заменить свой CharacterFactory по умолчанию.

Завод символов должен затем иметь возможность создавать разные типы символов. Таким образом, вы можете создавать по умолчанию хороших и плохих парней для своей игры. Затем клиенты могут переопределить эти методы, чтобы изменить значения по умолчанию.

Фасад используется для создания объекта, как если бы он был другого типа. Таким образом, ваше окно может иметь дочерний тип View.A 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() 
+0

Как я проиллюстрировал мой фасад неверен? –

+0

Да. Ваш пример - это не фасад, это комбинация фабрики, фабрики конфигурации и конфигурации, а также ключ обезьяны. –

+0

ха-ха! Хорошо, спасибо за информацию, мне нужно более убедительно объяснять это объяснение, плохо смотреть и понимать! –

Смежные вопросы