This describes what design patterns can be found in entire project (both this webpage darknessorlight.glaser.cz and the game webpage https://darknessorlight.herokuapp.com).
This is sub-layout for documentation pages
In software engineering, a software design pattern is some general and reusable solution
to some commonly occurring problem within a given context in software design.
It is a description or template for how to solve some problem.
It is not strictly said to obbey the design pattern. The idea of the design pattern is to help the programmer
to write and structure the code.
According to my game development and life programming experience, it also improves (or helps to maintain) the
architecture of the entire project.
more about architecture and on how to write code can be found in my video here
Here is list of design patterns that can be found in my projects. They are listed by the design pattern name.
Design pattern | Project | Where can be found | Approved by Spacek | Note by Spacek |
---|---|---|---|---|
Builder | Game | In inheritance chain: Player - Character - GameObject, each class allows additional setup. GameObject, for example, allows to set physics, position, collision. Character allows to set health, equipment... |
![]() |
|
Dependency Injection | This website | In presenter classes (Base presenter) |
![]() |
It would have to implemented manually |
Prototype | Game | Instead of creating an instance of game item, one of each item kind is created and later copied, if needed. This also applies to monsters, abilities (all taken from database) |
![]() |
|
Singleton | Game / client side (javascript) | For example MonsterDatabase (representing collection of all monsters, that is filled with data when received from server) is declared static (typescript), which makes sure that the class in the final javascript will be declared once, and above all classes that will need to reffer to it. |
![]() |
Make it imposible to create new instance (make constructor private or whatever) |
Lazy initialization | Network serializables in shared code | For example, in GamePacket, addCharacterDataInfoAboutAbilityUse() creates new instance of
CharacterAbilityUseEventPacketData only when it is needed.
That strategy can be found in many other classes that act as network serializable packet. Eventhough it is not classic getter, as usually shown in examples, it follows the delayed object creation principle |
![]() |
Design pattern | Project | Where can be found | Approved by Spacek | Note by Spacek |
---|---|---|---|---|
Composite | Game | Serializable class PlayerSpecificGamePacket which is supposed to contain data sent over network, contains inside via composition other packets, such as EquipmentPacket. All of them, however, inherit from SerializableBase, and therefore provide serialization, deserialization, and fuinctions for checking for data types and validity |
![]() |
|
Decorator | Game | GameObject allows to add Physics, collision shapes to itself dynamically. All parent segments and bounding boxes are recalculated appropriatelly, if needed |
![]() |
The decorating class should be sort of wrapper, but the one that does not change the interface... |
Module | Game Functions |
|
![]() |
Design pattern | Project | Where can be found | Approved by Spacek | Note by Spacek |
---|---|---|---|---|
Visitor | Game - client | In Circle.ts, collidesLine(l: Line) is called and Line is an argument (it is visitor). On the visitor is being called other function. |
![]() |
|
Iterator | Game (shared code) client and server | In containers, such as HashMap, LinkedList or HashSet. |
![]() |
|
Template method | Game Collision class |
|
![]() |
Design pattern | Project | Where can be found | Approved by Spacek | Note by Spacek |
---|---|---|---|---|
Balking | Game Client | Considering ItemDatabase class, which is singleton and supposed to hold all item prototypes, calling method to get an item might throw an exception, if no items are loaded, and therefore, no such item exists. Moreover, calling method to use an ability on Monster (inherits from Character) will have no effect, if the character does not have such an ability allowed. |
![]() |
|
Messaging | Game | Between the server and client. Data is being exchanged using serialization and packet classes. For example, it is defined, that client must send request for network dictionary resource, and server will send that. |
![]() |