exercises on DPs

advertisement
Exercises Set 2
Design Patterns
Lift
floor // lift position
stepin()
stepout()
up()
down()
stepout()
Lifting
Up
up()
up()
stepin()
Ready
Lifting
down()
stepout()
Lifting
Down
stepout()
down()
Here is a state machine of the class Lift. Apply the State Pattern to implement the machine. You don’t
need to provide full implementation of the transitions; you just need to show how the pattern can be
applied to this situation.
Name some important advantages of using the pattern to solve this problem.
2
The grade that you get for a course may consists of multiple grade-components. Each component can be a
concrete grade (which is a non-negative value), or it can also be composite (that is, it consists of further
components).
Apply the Composite Pattern to implement grades. Show how you subsequently can implement an operation
to check if a given grade is well formed. A grade is well formed if none of the concrete grades beneath it is
negative.
Suppose you now extend your grades such that each grade component can now have a weight. Show how you
can implement a function to calculate the total weighted grade.
Name one important advantage of using this Composite Pattern.
Now consider the model of Course to the right. The operation there is
supposed to calculate the final grade, if given a grade structure (as you
implemented above).
Course
calculateFinalGrade(grade)
However, we actually want to have a collection of algorithms to
calculate the final grade. Apply the Strategy Pattern to make this
possible.
Why do you bother to use the pattern here?
3
(pls also read the note in the note page)
To the left we have a model for Button. With decorators we can add
features to a button. E.g. we have a to turn a button to a on/off button.
That is, it has two states: on or off. When on the “on” state, do() will do
the original do(), but flip the state to “off”. When on the “off” state,
do() will actually do doOff(), and flip the state back to “on” again.
Button
name : String
do()
ButtonDecorator
OnOff
state
doOff()
…
Toon
moveForward()
moveBackward()
turnRight()
turnLeft()
equipedItem : Item
equip(item)
fire()
Delay
delay
The Delay feature will cause the button to be disabled for a specified
duration after do() is called. Then it becomes enabled again.
Anyway, provide an iterator (by applying the Iterator Pattern) to
iterate over all decorators of a given button.
What is the point of using the Iterator Pattern here?
To the left you see a model of toons/characters in a game. The game runs on a
server. Players play through their game clients. Through the client a player
sends commands to drive her toon. The commands are as shown in the model
to the left.
Apply the Command Pattern in this situation.
What would be your benefit for using this pattern?
4
Game
showMOB(name : String)
spawn()
Here you see a class MOB (Mobile/Monster) for a game. The game has two
operations shown to the left. One is to show how a mob looks like to a player (e.g.
as part of a help system), and the other is to spawn a random type of mob in the
game.
MOB
Name : String
Description : String
show()
run()
Both operations will need a way to create a mob. Provide this through the Factory
Method pattern. What is the benefit of using this pattern here?
RabidDuck
We now want to offer a number of ‘themes’ of this game. We have the standard
one, the techno-version, and the prehistoric-version. They differ only in the
visualization and the behavior of each mob-type. E.g. a prehistoric tiger looks much
bigger, whereas a techno tiger is metallic and can do few tricks that a standard
tiger cannot do.
Tiger
GiantSpider
Extend your factory to facilitate the creation of different kinds of MOBs from
different Game-themes.
Now provide abstract factories to create mobs of different themes. In what way is
the purpose of abstract factories different then the factories that you had
before/above ?
5
Monster
itemEquiped : Item
+ moveForward()
+ moveBackward()
+ turnRight()
+ turnLeft()
+ equip(item)
+ fire()
Mob
- itemslot : Item[]
+ walk()
+ run()
+ turnR()
+ turnL()
+ equip(item,itemslot)
+ fire()
The game company HeroQuest (HQ) has bought a smaller company Basher. The latter has a game product called
MonsterBash. HQ would reuse the monsters in that game for its own game. The class Monster is shown above. In
HQ’s own game, monsters are represented by the class Mob above. To facilitate this integration, write an adapter
(that is, apply the Adapter Pattern) to turn a Monster into a Mob.
For each of the patterns below, describe a situation where you want to apply it, and not the others.
•Adapter pattern
•Proxy pattern
•Facade pattern
6
Download