.


:




:

































 

 

 

 


. - ,




- , .

 

. , RTF-.

. , - . ( RTF-) , . , RTFReader, RTF-; RTFReader Text Converter.

, :

- , ;

- .

 

 

-Builder (TextConverter) - :

- Product;

a ConcreteBuilder(ASCIIConverter,TeXConverter,TextWidgetConverter)-

:

- Builder;

- ;

- (, GetASCI IText, GetTextWidget);

- irector (RTFReader) - :

- , Builder;

- roduct (ASCIIText, TeXText, TextWidget) - :

- . ConcreteBuilder

;

- , , .

 

- - Director - Builder;

- , ;

- ;

- .

.

 

 

 

 

:

- . Builder , , . , ;

- , . , . , , .

ConcreteBuilder , -

. , .

RTF- , RTF, , SGMLReader, TextConverters SGML- ASCII-, - ;

. , , .

, .

, . ,

, .

Builder, , .

. ConcreteBuilder , .

:

- . . Builder , .

. , . RTF- .

. , , MazeBui Ider . , , , . - , , .

- . , , , . RTF- ASCIIText TextWidget, .

, , , , Builder ;

- Builder no . C++ -.

, , .

- CreateMaze, , MazeBuilder.

MazeBuilder -

:

 

class MazeBuilder {

public:

virtual void BuildMaze() { }

virtual void BuildRoom(int room) { }

virtual void BuildDoor(int roomFrom, int roomTo) { }

virtual Maze* GetMaze() { return 0; }

protected:

MazeBuilder();

};

 

: , , . GetMaze . MazeBui Ider .

MazeBuilder

. , .

MazeBuilder, - CreateMaze,

:

 

Maze* MazeGame::CreateMaze (MazeBuilder& builder) {

builder.BuildMaze();

builder.BuiIdRoom(l);

builder.BuiIdRoom(2);

builder.BuildDoor(1, 2);

return builder.GetMaze();

}

CreateMaze . , , , , . -, , , , . , MazeBuilder .

, ; , MazeBuilder. , MazeBuilder . GreateComplexMaze:

 

Maze* MazeGame::CreateComplexMaze (MazeBuilder& builder) {

builder.BuildRoom(l);

builder.BuildRoom(lOOl);

return builder.GetMazeO; }

 

, MazeBuilder , - .

. MazeBuilder.

StandardMazeBuilder

. , _currentMaze:

 

class StandardMazeBuilder: public MazeBuilder {

public:

StandardMazeBuilder();

virtual void BuildMazeO;

virtual void BuildRoom(int);

virtual void BuildDoor(int, int);

virtual Maze* GetMazef);

private:

Direction CommonWall(Room*, Room*);

Maze* _currentMaze;

};

CommonWall ( ) - , .

StandardMazeBuilder currentMaze:

 

StandardMazeBuilder::StandardMazeBuilder () {

_currentMaze = 0;

}

BuildMaze Maze, , , ( GetMaze):

 

void StandardMazeBuilder:: BuildMaze () {

_currentMaze = new Maze;

}

Maze* StandardMazeBuilder::GetMaze () {

return _currentMaze;

}

BuildRoom :

 

void StandardMazeBuilder::BuildRoom (int n) {

if (!_currentMaze->RoomNo(n)) {

Room* room = new Room(n);

_currentMaze->AddRoom(room);

room->SetSide(North, new W a l l);

room->SetSide(South, new W a l l);

room->SetSide(East, new W a l l);

room->SetSide(West, new Wall);

}

}

 

, StandardMazeBuilder :

 

void StandardMazeBuilder: rBuildDoor (int nl, int n2) {

Room* rl = _currentMaze->RoomNo (nl);

Room* r2 = _currentMaze->RoomNo (n2);

Door* d = new Door(rl, r2);

rl->SetSide(CommonWall(rl,r2), d);

r2->SetSide(CommonWall(r2,rl), d);

}

 

Great eMaze StandardMazeBuilder:

 

Maze* maze;

MazeGame game;

StandardMazeBuilder builder;

game. CreateMaze (builder);

maze = builder. GetMaze ();

 

StandardMazeBuilder Maze . Maze, , a StandardMazeBuilder Maze. , MazeBuilder, , .

MazeBuiIder Count ingMazeBuiIder.

, , :

 

class CountingMazeBuilder: public MazeBuilder {

public:

CountingMazeBuilderO;

virtual void BuildMazeO;

virtual void BuildRoom(int);

virtual void BuildDoor (int, int);

virtual void AddWall(int, Direction);

void GetCounts (int&, int&) const;

private:

int _doors,-

int _rooms;

};

 

,

MazeBuilder :

 

CountingMazeBuilder:: CountingMazeBuilder () {

_rooms = _doors = 0;

}

void CountingMazeBuilder::BuildRoom (int) {

_rooms++;

}

void CountingMazeBuilder:.-BuildDoor (int, int) {

_doors++;

}

void CountingMazeBuilder::GetCounts (

int& rooms, int& doors

) const {

rooms = _rooms;

doors = _doors;

}

CountingMazeBuilder:

 

int rooms, doors;

MazeGame game;

CountingMazeBuilder builder;

game.CreateMaze(builder);

buiIder.GetCount s(rooms, doors);

cout " "

rooms " "

doors " " endl;

 

RTF

++ [WGM88]. , .

Smalltalk-80 []:

Parser - , ProgramNodeBuilder. Parser ProgramNodeBuilder . Parser ;

- Class Builder- , . ;

- ByteCodeStream- ,

. ByteCodeStream , , Smalltalk. ByteCodeStream , , .

, . , , - ( ). , .

- , .

Factory Method





:


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


:

:

,
==> ...

1877 - | 1795 -


© 2015-2024 lektsii.org - -

: 0.051 .