Inspired by Design patterns implemented in Java
Design patterns are formalized best practices that the programmer can use to solve common problems when designing an application or system. The classical design patterns are the 23 design patterns by GoF.
This project implements dozens of design patterns in Scala. The Scala language has several advanced features which make the implementations are different from other programming languages.
Design patterns are categorized into:
For each design pattern, it tags:
- scala features indicates if the implementation uses scala language-specific features.
- functional indicates if the design pattern can be implemented in functional-programming style.
- Gang of four indicates if the design pattern is one of the classical 23 design patterns by GoF
Name | scala features | functional | Gang of four |
---|---|---|---|
abstract factory | no | no | yes |
builder | no | no | yes |
cake | yes(trait mix-in) | no | no |
factory kit | no | yes | no |
factory method | no | no | yes |
prototype | no | no | yes |
simple factory | yes(companion object) | no | no |
singleton | yes(object) | no | yes |
value object | yes(case class) | no | no |
Name | scala features | functional | Gang of four |
---|---|---|---|
adapter | yes(implicit class) | no | yes |
bridge | no | no | yes |
composite | no | no | yes |
decorator | yes(stackable trait) | no | yes |
facade | no | no | yes |
flyweight | no | no | yes |
magnet | yes(implicit conversion) | no | no |
proxy | no | no | yes |
type classes | yes(impilict parameter) | no | no |
Name | scala features | functional | Gang of four |
---|---|---|---|
chain of responsibility | yes(partial function) | yes | yes |
command | no | yes | yes |
loan | yes(structural type) | yes | no |
mediator | no | no | yes |
memento | no | no | yes |
observer | no | no | yes |
state | no | no | yes |
strategy | no | yes | yes |
template method | no | no | yes |
visitor | no | yes | yes |
Name | scala features | functional | Gang of four |
---|---|---|---|
selfless trait | yes(companion trait) | no | no |
monad | no | yes | no |
Name | scala features | functional | Gang of four |
---|---|---|---|
data access object | no | no | no |
repository | no | no | no |
Run sbt assembly
to compile, run tests and package all sub-projects.
If you want to operate specific sub-project, use project
command in sbt shell to switch sub-project:
> projects // list all sub-projects
> project builder // switch to 'builder' sub-project
> project all // switch to 'all' project which including all sub-projects
This project is licensed under the terms of the Apache 2.0 license.