.


:




:

































 

 

 

 


. - ,




- , .

, .

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





:


: 2015-11-23; !; : 691 |


:

:

.
==> ...

1739 - | 1590 -


© 2015-2024 lektsii.org - -

: 0.033 .