我不太确定完全理解工厂模式。
假设我有一个Customer
基本上具有以下方法的类:
CreateCustomer
- 静态,从头开始创建客户并将其添加到数据库中,LoadCustomer
Customer
- 静态,从数据库加载一个实例,KillCustomer
-不是静态的,从数据库中删除客户。
如果我理解得很好,
LoadCustomer
是进入工厂班的好人选。- 怎么样
CreateCustomer
?我想它可能会被放入工厂类。是对的吗?如果没有,静态CreateCustomer
方法会改变数据库状态,然后调用CustomerFactory.LoadCustomer
. 恕我直言,这是一个糟糕的设计:给定的对象不必了解她自己的工厂的任何信息。 KillCustomer
在我看来,工厂是一个非常糟糕的候选者:它作用于一个已经创建的对象,而不是创建一个对象。另一方面:- 如果非静态方法将客户从数据库中删除,则对象(从中
KillCustomer
调用)仍然存在。看到一个对象在数据库级别自杀并仍然保留在业务级别,这是很奇怪的。在这个级别上,从工厂调用KillCustomer
会更合理。例如,如果对象被缓存在应用程序中,工厂可以将其从数据库和缓存中删除。 - 将创建对象的方法和删除对象的方法放在不同的类中似乎也很奇怪。为什么工厂可以只建造一些东西,而永远不会破坏建造的东西?
- 如果非静态方法将客户从数据库中删除,则对象(从中
最后但同样重要的是,假设客户缓存在应用程序中。谁负责管理缓存?IMO,工厂必须这样做:它创建对象,因此选择是否必须加载具有从数据库填充的属性的新对象,或者该对象是否已存在于缓存中是一个很好的选择。
那么,在我对工厂模式的思考中,什么是对的,什么是错的?