| « Поставить закладку » « Сделать стартовой » | |||
|
|||
|
Паттерн Строитель. Builder.
Этот паттерн очень похож на абстрактную фабрику, но в нем акцентируется пошаговое конструирование объекта - в отличие от фабрики, где конструируется семейство классов. Предположим, что в Вашей игре нужно строить дворец правителя. Дворец состоит из трона, тюрьмы и молельни. Ваша игра должна создать дворец для каждой расы, и для создания дворца определяется абстрактный класс строитель: class CPalaceBuilвer
{
public:
// Эти функции выстраивают дворец
virtual void buildPalace(){};
virtual void buildTron(){};
virtual void buildPrison(){};
virtual void buildChurch(){};
// А эта возвращает уже построенный дворец,
// для базового класса пустышку.
virtual CPalace* getPalace ( return NULL);
}
Функции построения могут быть чистыми виртуальными или нет. Во всяком случае CPalaceBuilder должен объявить интерфейс для строительства дворца. Конкретные дворцы для гномов и людей должны создаваться классами-строителями, производными от CPalaceBuilder. Теперь движок Вашей игры может создавать дворцы для разных рас по одному алгоритму, если передавать в функцию создания разные указатели на разные конкретные строители: CPalace* MyGame::createPalace(CPalaceBuilder* builder)
{
// Обратились к строителю для начала построения
builder->buildPalace();
// Теперь все части дворца
builder->buildTron();
builder->buildPrison();
builder->buildChurch();
// Теперь получаем собранный дворец - для строителя
// это сигнал, что все закончено
return builder->getPalace();
}
Совсем необязательно, чтобы продуктом был какой-то красивый составной объект. Вполне возможно, что Ваше приложение читает файл и просто желает его преобразовать в произвольный формат. Тогда преобразованием будет заниматься исключительно специализированный строитель - по одному на каждый формат. Типа такого: CTargetDoc* CMyApp::convertTo(CConvTo& _cc)
{
// Начали новый документ
_cc.startTarget();
// считываем до конца источник и направляем
// стоителю слова на обработку
while (!myFile.eof())
_cc.convertToken(myFile.readToken());
// Если все закончено, получить целевой документ
return _cc.getTarget();
}
Мы будем получать документ в формате, определяемом параметром _cc - который собственно и есть строитель. Структура паттерна такова: директор направляет строителю
запросы на создание частей целевого объекта, и по завершении строительства
запрашивает целевой объект полностью и сразу. By Albert Makhmutov. Рубрика: Паттерны проектирования
Вышел MySQL 5.1.30, первый стабильный рели....
После публикации 29 тестовых версий анонсирован первый стабильный релиз MySQL 5.1, пригодный для промышленной эксплуатации и обеспечивающий увеличение производительности для "тяжелых" SQL запросов, по сравнению с MySQL 5.0, примерно на 15-20%. Главные новшества появившиеся в MySQL 5.1:
Подробнее... |
Рубрика: MySQL
| Добавлено: 28.11.2008
Тестирование параллельных программ.
Тестирование параллельного программного обеспечения представляет собой более сложную задачу по сравнению с тестированием последовательной программы. Программист должен знать о подводных камнях при тестировании параллельного кода, имеющихся методологиях и инструментарии.
Подробнее... |
Рубрика: Тестирование
| Добавлено: 28.11.2008
Архитектура AMD64 (EM64T).
Аннотация. В статье кратко рассматривается архитектура AMD64 компании AMD и ее реализация EM64T компании Intel. Описаны особенности архитектуры, ее возможности, достоинства и недостатки.
Подробнее... |
Рубрика: Архитектура AMD
| Добавлено: 27.11.2008
Остальные статьи: |
Цитата дня (все,добавить):
|
Realcoding.NET
© 2003-2008 |
Контакты |
Реклама на сайте
|