Prototype
The Prototype design pattern is all about customization and creating objects that are similar but slightly different. To understand it better, Let's look at an example.
Imagine we have a system that manages users and their permissions. A data class
representing a user might look like this:
data class User( val name: String, val role: Role, val permissions: Set<String>, ) { fun hasPermission(permission: String) = permission in permissions }
Each user must have a role, and each role has a set of permissions.
We'll describe a role as an enum
class:
enum class Role { ADMIN, SUPER_ADMIN, REGULAR_USER }
The enum
classes are a way to represent a collection of constants. This is more convenient than representing a role as a string, for example, as...