- , .
, .
Kit ().
, , Motif Presentation Manager. () , . , .
, .
, WidgetFac tory, .
, . WidgetFactory , - . , , . , .
WidgetFactory. , . , Great eScrollBar Mot if Widget Fac tory Motif, PMWidgetFactory Presentation Manager. , WidgetFactory, , .
, , , .
Widget Factory . Motif Motif, , Mot ifWidgetFactory.
, :
- , , ;
- ;
- ;
, , .
|
|
- AbstractFactory (WidgetFactory) - :
- , -
;
- ConcreteFactory (Mot if WidgetFactory, PMWidgetFactory) - : - , -;
- AbstractProduct (Window, ScrollBar) - :
- -;
-ConcreteProduct (Mot if Window, Mot if ScrollBar) - :
- -,
;
- Abstract Product;
- Client - :
- , AbstractFactory AbstractProduct.
-
ConcreteFactory. -, . ;
-AbstractFactory - ConcreteFactory.
:
- . , . , . . , ;
- . : . . , . , . Motif Presentation Manager , ;
- . , , . AbstractFactory ;
- . - . AbstractFactory , . , AbstractFactory . .
:
- , . , ConcreteFactory . ;
- . AbstractFactory . - ConcreteProduct. (. ). . , , .
|
|
, . - . .
. Maze Factory . , . , , , , . MazeFactory , , :
class MazeFactory {
public:
MazeFactory();
virtual Maze* MakeMazeO const
{ return new Maze; }
virtual Wall* MakeWalK) const
{ return new Wall; }
virtual Room* MakeRoom(int n) const
{ return new Room(n); }
virtual Door* MakeDoor(Room* rl, Room* r2) const
{ return new Door(rl, r2); }
};
, - CreateMaze , , . , .
CreateMaze, , MazeFactory :
Maze* MazeGame::CreateMaze (MazeFactory& factory) {
Maze* aMaze = factory.MakeMaze();
Room* rl = factory.MakeRoom(l);
Room* r2 = factory.MakeRoom(2);
Door* aDoor = factory.MakeDoor(rl, r2);
aMaze->AddRoom(rl.);
aMaze->AddRoom(r2);
rl->SetSide(North, factory.MakeWall());
rl->SetSide(East, aDoor);
rl->SetSide(South, factory.MakeWall());
rl->SetSide(West, factory.MakeWall());
r2->SetSide(North, factory.MakeWall());
r2->SetSide(East, factory.MakeWall());
r2->SetSide(South, factory.MakeWall());
r2->SetSide(West, aDoor);
return aMaze;
}
Enchant edMazeFactory , MazeFactory. -, Room, Wall ..:
class EnchantedMazeFactory: public MazeFactory {
public:
EnchantedMazeFactory();
virtual Room* MakeRoom(int n) const
{ return new EnchantedRoom(n, CastSpell()); }
virtual Door* MakeDoor(Room* rl, Room* r2) const
{ return new DoorNeedingSpell(rl, r2); }
protected:
Spell* CastSpell() const;
};
, , . , . Room , , . Wall, , . RoomWithABomb BombedWall.
, BombedMazeFactory, BombedMazeFactory, BombedWall RoomWithABomb. :
Wall* BombedMazeFactory::MakeWall () const {
|
|
return new BombedWall;
}
Room* BombedMazeFactory::MakeRoom(int n) const {
return new RoomWithABomb(n);
}
, , CreateMaze, BombedMazeFactory:
MazeGame game;
BombedMazeFactory factory/-
game. CreateMaze (factory);
CreateMaze EnchantedMazeFactory.
, MazeFactory - . .
, MazeFactory - , AbstractFactory, ConcreteFactory. . MazeFactory - , , MazeFactory, .
CreateMaze SetSide . BombedMazeFactory, RoomWithABomb, BombedWall. RoomWithABomb BombedWall, , - Wall* BombedWall*.
, BombedWall*, , BombedMazeFactory.
Builder