Design Patterns : Elements of Reusable Object-Oriented Software


Design Patterns: Elements of Reusable Object-Oriented Software



Download 4,06 Mb.
Pdf ko'rish
bet75/288
Sana07.04.2022
Hajmi4,06 Mb.
#535140
1   ...   71   72   73   74   75   76   77   78   ...   288
Bog'liq
GOF Design Patterns

Design Patterns: Elements of Reusable Object-Oriented Software 
95 
The classes Room, Door, and Walldefine the components of the maze used in all 
our examples. We defineonly the parts of these classes that are important for 
creating amaze. We'll ignore players, operations for displaying and 
wanderingaround in a maze, and other important functionality that isn'trelevant 
to building the maze. 
The following diagram shows the relationships between these classes: 
Each room has four sides. We use an enumeration Direction inC++ implementations 
to specify the north, south, east, and west sides ofa room: 
enum Direction {North, South, East, West}; 
The Smalltalk implementations use corresponding symbols to representthese 
directions. 
The class MapSite is the common abstract class for all thecomponents of a maze. 
To simplify the example, MapSite definesonly one operation, Enter. Its meaning 
depends on what you'reentering. If you enter a room, then your location changes. 
If you try toenter a door, then one of two things happen: If the door is open, 
you gointo the next room. If the door is closed, then you hurt your nose. 
class MapSite { 
public: 
virtual void Enter() = 0; 
}; 
Enter provides a simple basis for more sophisticated gameoperations. For example, 
if you are in a room and say "Go East," thegame can simply determine which MapSite 
is immediately to theeast and then call Enter on it. The subclass-specificEnter 
operation will figure out whether your location changedor your nose got hurt. 
In a real game, Enter could take theplayer object that's moving about as an argument. 


Design Patterns: Elements of Reusable Object-Oriented Software 
96 
Room is the concrete subclass of MapSite thatdefines the key relationships between 
components in the maze. Itmaintains references to other MapSite objects and stores 
aroom number. The number will identify rooms in the maze. 
class Room : public MapSite { 
public: 
Room(int roomNo); 
MapSite* GetSide(Direction) const; 
void SetSide(Direction, MapSite*); 
virtual void Enter(); 
private: 
MapSite* _sides[4]; 
int _roomNumber; 
}; 
The following classes represent the wall or door that occurs on eachside of a 
room. 
class Wall : public MapSite { 
public: 
Wall(); 
virtual void Enter(); 
}; 
class Door : public MapSite { 
public: 
Door(Room* = 0, Room* = 0); 
virtual void Enter(); 
Room* OtherSideFrom(Room*); 
private: 
Room* _room1; 
Room* _room2; 
bool _isOpen; 
}; 
We need to know about more than just the parts of a maze. We'll alsodefine a Maze 
class to represent a collection of rooms.Maze can also find a particular room 
given a room numberusing its RoomNo operation. 



Download 4,06 Mb.

Do'stlaringiz bilan baham:
1   ...   71   72   73   74   75   76   77   78   ...   288




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish