Prototype
The Prototype design pattern focuses on customization and the creation of objects that are similar but have slight variations. To gain a better understanding, let’s examine an example.
Consider a system that handles user management and permissions. We can represent a user using a data
class, which might be structured as follows:
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
}
Enum classes offer a convenient method for representing a collection of constants. This approach is advantageous compared to using strings to represent roles, as it allows for compile-time checks ensuring the existence of such objects. Additionally, using an enum allows...