ory:factories["Square"]= new S
Автор admin
Суббота, 20 июня 2009 11:32
ory:factories["Square"]= new Square::Factory; 500 Глава 10 • Паттерны проектирования -ShapeFactorylnitializerO { map::iterator it – ShapeFactory::factories.begin(): while(it != ShapeFactory::factories.endO) delete it++->second: } }: // Определение статического объекта: ShapeFactorylnitializer ShapeFactorylnitializer::si: char* sl[] = { “Circle”. “Square”. “Square”. “Circle”. “Circle”. “Circle”. “Square” }: int mainO { vector shapes; try { for(size_t i = 0; i < sizeof si / sizeof sl[0]; i++) shapes.push_back(ShapeFactory::createShape(si [i])): } catch(ShapeFactory::BadShapeCreation e) { cout « e.what О « endl: return EXITJAILURE: } for(size_t i = 0; i < shapes.sizeO; i++) { shapes[i]->draw(); shapes[i]->erase(): } purge(shapes): } III:- В новой версии Фабричный метод находится в отдельном классе ShapeFactory в виде виртуальной функции create(). Функция объявлена закрытой, то есть она не может вызываться напрямую, но может переопределяться. Подклассы Shape должны создать собственные подклассы ShapeFactory и переопределить функцию create() для создания объекта своего типа. В
Комментарии закрыты.
Последние комментарии