| trait Animal | |
| private class Dog extends Animal | |
| private class Cat extends Animal | |
| trait Wanna | |
| case object WannaCat extends Wanna | |
| case object WannaDog extends Wanna | |
| trait AnimalFactory[Wanna] { | |
| def create(): Animal | |
| } | |
| object Animal { | |
| def apply[T <: Wanna](kind: T)(implicit factory: AnimalFactory[T]) = | |
| factory.create() | |
| } | |
| implicit val canMakeCat = new AnimalFactory[WannaCat.type] { | |
| def create(): Animal = new Cat() | |
| } | |
| implicit val canMakeDog = new AnimalFactory[WannaDog.type] { | |
| def create(): Animal = new Dog() | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Mortimerp9 commentedOct 12, 2013
You can then create animals with: