Я думаю, что должна быть функция, позволяющая делать и то, и другое. Я думаю, что фабрики сделают отрицательное и положительное.
Но не уверены в обратном?