在写问题之前,我阅读了以下参考资料:
我看到许多像我一样的人难以“抓住”抽象工厂和工厂模式之间的具体差异。我对设计模式不熟悉,我遇到了这个示例http://www.oracle.com/technetwork/java/dataaccessobject-138824.html,并且我正在尝试加深主题。
通过比较,我发现对于3个DTO,我们有:
1)抽象工厂
2)工厂方法:
从代码量的角度来看,我看不出任何实质性的区别。如果您需要添加新的持久性支持或新的接口/ DTO,则差异是最小的(并且是互补的)。
从客户的角度来看:
1)抽象工厂:
public static final int PERSISTENCE_TYPE = DAOFactory.ORACLE;
DAOFactory daoFactory = DAOFactory.getDAOFactory(PERSISTENCE_TYPE);
CustomerDAO cDAO = daoFactory.getCustomerDAO();
AccountDAO aDAO = daoFactory.getAccountDAO();
OrderDAO oDAO = daoFactory.getOrderDAO();
2)工厂方法:
public static final int PERSISTENCE_TYPE = DAOFactory.ORACLE;
CustomerDAO cDAO = CustomerDAOFactory.getCustomerDAO(PERSISTENCE_TYPE);
AccountDAO aDAO = AccountDAOFactory.getAccountDAO(PERSISTENCE_TYPE);
OrderDAO oDAO = OrderDAOFactory.getOrderDAO(PERSISTENCE_TYPE);
使用有关持久性类型的DAOFactory并返回与该支持有关的所有DAO而不是为每个DTO使用多个DAOFactory以获得所使用的持久性类型的DAO是否有优势?
现在,我只看到使用抽象工厂的美学概念差异,是否还有我对软件设计的无知无法掌握的实用程序利益?
以前的笔记的一个注释您可以阅读Efecrive Java 2nd Edition中的工厂方法。但是要想想模式之间在现实世界中的差异,请参见:例如
厂
想象一下,您正在盖房子,然后接近木匠的窗户。您提出您的要求,他将构建一个窗口。在这种情况下,木匠是窗户的工厂。您的规格是工厂的输入,窗口是工厂的输出。
抽象工厂
现在,考虑该窗口的相同示例。您可以去木匠那里,也可以去窗户商店或PVC商店。他们都是窗户工厂。根据情况,您可以确定需要处理的工厂类型。
因此,结论-这取决于您要解决的问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句