Pattern: Abstract factory added + tests