• Одиночное наследование
• Это все еще относительно просто
. Его легко реали-
зовать и понять. Если технически неподготовлен-
ные пользователи будут работать с такой системой,
то чем меньше «подвижных» частей, тем лучше.
Многие языки программирования поддерживают
только одиночное наследование. Один из лучших
компромиссов между мощностью и простотой!
• Получение атрибутов медленнее
. Чтобы получить
определенный фрагмент данных из объекта типа,
нам придется пройти всю цепочку наследования.
Если наш код чувствителен к производительности,
мы не захотим тратить на это время.
• Множественное наследование
• Можно почти полностью избежать дублирования
данных
. При хорошей системе множественного на-
следования пользователи могут построить иерар-
хию объектов типа практически без избыточности,
что поможет избежать многократного «копиро-
вать-вставить», когда настанет время изменить
значения.
268
Объект типа (Type Object) —
Паттерны программирования игр
• Это сложно
. К сожалению, преимущества скорее
теоретические, чем практические. Сложно понять
множественное наследование и разобраться в коде.
Если наш тип дракона-зомби наследует и от дра-
кона, и от зомби, то источником каких параметров
является зомби, а каких — дракон? Чтобы исполь-
зовать такую систему, пользователям нужно пони-
мать устройство дерева наследования, а главное —
уметь строить продуманную иерархию.
Большинство стандартов кодирования С++, ко-
торые я вижу сегодня, запрещают множественное
наследование. А в Java и C# оно не реализовано
вовсе. Надо признать неприятный факт: его слож-
но правильно реализовать и чаще лучше вовсе его
не использовать. И хотя о нем стоит знать, у вас
вряд ли возникнет реальная необходимость исполь-
зовать множественное наследование для объектов
типа в вашей игре.
Смотрите также
• Высокоуровневая проблема, которую решает этот
паттерн, — разделение данных и поведения между
несколькими объектами. Другой паттерн, решаю-
щий ту же проблему, но несколько другим спосо-
бом, — Прототип (Prototype) (с. 79).
• Объект типа (Type Object) — близкий родственник
паттерна Приспособленец (Flyweight) (с. 47). Оба
позволяют вам разделить данные между экземпля-
рами. Цель паттерна Приспособленец (Flyweight) —
сэкономить память, так что общие данные могут
не представлять «тип» объекта в общем понимании
этого слова. Основная цель паттерна Объект типа
(Type Object) заключается в создании организован-
ности и гибкости.
• Есть очень много общего между этим паттерном
и паттерном Состояние (State) (с. 117). Оба позво-
ляют объекту делегировать часть своего поведения
другому объекту. В случае с паттерном Объект типа
(Type Object) мы делегируем то, чем объект
явля-
ется
в общем: постоянные данные, описывающие
объект. При использовании паттерна Состояние
(State) мы делегируем то, чем объект является
пря-
мо сейчас
: временные данные, которые описывают
текущую конфигурацию объекта.
Мы говорили об объекте, изменяющем свой тип.
Так вот, это можно рассматривать как дублирова-
ние Объектом типа (Type Object) части функцио-
нальности паттерна Состояние (State).
Паттерны
уменьшения
связанности
Do'stlaringiz bilan baham: |