Erich Gamma Ralph Johnson Richard Helm John Vlissides Addison-Wesley



Download 6,32 Mb.
Pdf ko'rish
bet82/273
Sana02.03.2022
Hajmi6,32 Mb.
#479589
1   ...   78   79   80   81   82   83   84   85   ...   273
Bog'liq
Priemioop

Паттерн Abstract Factory
реализация для простых применений паттерна абстрактная фабрика. Посколь-
ку MazeFactory - конкретный класс, состоящий только из фабричных мето-
дов, легко получить новую фабрику MazeFactory, породив подкласс и замес-
тив в нем необходимые операции.
В функции CreateMaze используется операция SetSide для описания сто-
рон комнат. Если она создает комнаты с помощью фабрики BombedMazeFactory,
то лабиринт будет составлен из объектов класса RoomWithABomb, стороны кото-
рых описываются объектами класса BombedWall. Если классу RoomWithABomb
потребуется доступ к членам BombedWall, не имеющим аналога в его предках, то
придется привести ссылку на объекты-стены от типа Wall* к типу BombedWall*.
Такое приведение к типу подкласса безопасно при условии, что аргумент действи-
тельно принадлежит классу BombedWall*, а это обязательно так, если стены соз-
даются исключительно фабрикой BombedMazeFactory.
В динамически типизированных языках вроде Smalltalk приведение, разуме-
ется, не нужно, но будет выдано сообщение об ошибке во время выполнения, если
объект/класса Wai 1 встретится вместо ожидаемого объекта
 подкласса
класса Wai 1.
Использование абстрактной фабрики для создания стен предотвращает такие
ошибки, гарантируя, что могут быть созданы лишь стены определенных типов.
Рассмотрим версию MazeFactory на языке Smalltalk, в которой есть единствен-
ная операция make, принимающая вид изготавливаемого объекта в качестве парамет-
ра. Конкретная фабрика при этом будет хранить классы изготавливаемых объектов.
Для начала напишем на Smalltalk эквивалент
CreateMaze:
В разделе «Реализация» мы уже говорили о том, что классу MazeFactory
нужна всего одна переменная экземпляра partCatalog, предоставляющая сло-
варь, в котором ключом служит класс компонента. Напомним еще раз реализа-
цию метода make:
make: partName
^ (partCatalog at: partName) new
Теперь мы можем создать фабрику MazeFactory и воспользоваться ей
для реализации createMaze. Данную фабрику мы создадим с помощью метода
createMazeFactory
 класса
MazeGame:
createMaze: aFactory
| rooml room2 aDoor |
rooml := (aFactory make: #room) number: 1.
room2 := (aFactory make: #room) number: 2.
aDoor := (aFactory make: #door) from: rooml to: room2.
rooml atSide: #north put: (aFactory make: #wall).
rooml atSide: #east put: aDoor.
rooml atSide: #south put: (aFactory make: #wall).
rooml atSide: #west put: (aFactory make: #wall).
room2 atSide: #north put: (aFactory make: #wall).
room2 atSide: #east put: (aFactory make: #wall).
room2 atSide: #south put: (aFactory make: #wall).
room2 atSide: #west put: aDoor.
^ Maze new addRoom: rooml; addRoom: room2; yourself



Download 6,32 Mb.

Do'stlaringiz bilan baham:
1   ...   78   79   80   81   82   83   84   85   ...   273




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