WarZes
GameDev.ru / Страницы / WarZes / Форум / Изучаю паттерны: Abstract Factory (комментарии)

Изучаю паттерны: Abstract Factory (комментарии)

Поделиться

Страницы: 1 2 Следующая

war_zesПостоялецwww6 мая 201312:09#0
Изучаю паттерны: Abstract Factory (комментарии)
Это сообщение сгенерировано автоматически.
watВедущийwww6 мая 201312:09#1
  IUnit *unit = UnitFactory->Create();
  printf("%s\n", unit->GetDesc().c_str());
  delete unit;

Думаю, что хорошо, если завести привычку delete размещать в том же .cpp модуле, что и new. Потому что, если фабрика будет в другой DLL, то этот код закрэшится. Например, можно сделать метод Release() для юнита, где будет delete this; Или удалять той же фабрикой. Да и код проверять на лики будет проще.

Правка: 6 мая 2013 12:11

war_zesПостоялецwww6 мая 201312:24#2
wat
> Думаю, что хорошо, если завести привычку delete размещать в том же .cpp модуле,
> что и new.
Набросал пример по другому примеру:) А так да Пример писал выкинув все лишнее, так как лично меня очень сильно отвлекает куча стороннего кода, когда приходится читать сотни строк кода только для того чтобы понять метод из пяти строк - это просто ужОс

Правка: 6 мая 2013 13:09

codesnipПостоялецwww9 мая 201321:52#3
лучше покажи где хранить созданных юнитов.
war_zesПостоялецwww10 мая 20137:21#4
codesnip
> лучше покажи где хранить созданных юнитов.
а где их хранить?
PixPainterПостоялецwww10 мая 20139:14#5
>лучше покажи где хранить созданных юнитов.

>а где их хранить?
не благодарите

Unit* Units[MAX_UNITS_COUNT];

geckowikiПостоялецwww10 мая 201312:08#6
Хорошая статья про фабрики: http://habrahabr.ru/post/129202/
И в GPG есть интересные вещи.
SergioУдалёнwww10 мая 201314:23#7
После джавы возникает стойкое отвращение к фабрикам, но вообще паттерн очень хороший и полезный.
war_zesПостоялецwww10 мая 201315:41#8
geckowiki
> Хорошая статья про фабрики: http://habrahabr.ru/post/129202/
читану:)

Sergio
> После джавы возникает стойкое отвращение к фабрикам, но вообще паттерн очень
> хороший и полезный.
Вот что странно, разбираю паттерны - все красиво выглядит... Но никаких идей где это применять, а точнее на любую идею есть более простое решение. так что сейчас только для плюсика изучаю чтобы в чужих кодах легче было

=A=L=X=Забаненwww10 мая 201316:32#9
war_zes
> Но никаких идей где это применять, а точнее на любую идею есть более простое
> решение.

Субж у меня всегда сам собой получался когда я писал сериализацию тем же "юнитам" (ну у меня не юниты были, но смысл тот же).

ХаусПостоялецwww19 окт. 201622:05#10
А почему бы не сделать через мета-классы?
type
  TUnit = class (TObject)
  end;

  TUnitMeta = class of TUnit;

  TShooter = class (TUnit)
  end;

  TPsycho = class (TUnit)
  end;

procedure TForm1.Button1Click(Sender: TObject);
var
  UnitMeta: TUnitMeta;
  UnitNew:  TUnit;
begin
  UnitMeta:= TPsycho;

  UnitNew:= UnitMeta.Create();

  Caption:= UnitNew.ClassName;

  FreeAndNil(UnitNew);
end;
=A=L=X=Забаненwww20 окт. 20167:36#11
Хаус
> А почему бы не сделать через мета-классы?

Это называется виртуальные конструкторы - когда есть метаклассы как таковые и у них есть виртуальные методы, конструирующие в конкретных реализациях конкретные экземпляры (виртуальные конструкторы).
Метаклассы при этом начинают играть роль собственно классов фабрик из шаблона проектирования.
В Delphi такое есть и это действительно удобненько.

ХаусПостоялецwww20 окт. 201613:21#12
=A=L=X=
> В Delphi такое есть и это действительно удобненько.

В C++ нету такого? O_o

ХаусПостоялецwww20 окт. 201613:26#13
Sergio
> После джавы возникает стойкое отвращение к фабрикам

Почему?

=A=L=X=Забаненwww20 окт. 201613:35#14
Хаус
> В C++ нету такого? O_o

В С++ нет метаклассов как средства языка.
Фактически их приходится делать вручную. Ну или с помощью волшебных макросов как в каком нибудь MFC.
Я когда пишу сериализацию у меня всегда получается аналог, выглядит примерно так:

*.h

class MyClass: public Serializable
{
  DECLARE_SERIALIZABLE
  ...
};

*.cpp

IMPLEMENT_SERIALIZABLE( MyClass )
...

Эти макросы как раз заводят вспомогательные классы, которые, суть регистрируются как фабрики в общем мапе фабрик, предоставляют интерфейс создания класса нулевого состояния и загрузки класса из потока, добавляют в сам класс метод получающий для объекта его метакласс и т.п. и т.д. Т.е. ручками.

Правка: 20 окт. 2016 13:35

Страницы: 1 2 Следующая

/ Форум / WarZes

2001—2017 © GameDev.ru — Разработка игр