java – 在以下示例中使用Abstract Factory而不是工厂方法有什么好处?
作者:互联网
在写这个问题之前,我读了以下参考文献:
> Factory Method Vs Abstract Factory
> Abstract Factory vs Factory Method (scope)
> Abstract Factory, Factory Method, Builder
> Factory, Abstract Factory and Factory Method
> Differences between Abstract Factory Pattern and Factory Method
我看到像我这样的很多人都难以“掌握”抽象工厂和工厂模式之间的具体差异.
我不熟悉设计模式,我遇到了这个例子http://www.oracle.com/technetwork/java/dataaccessobject-138824.html,我正在努力深化这个主题.
通过比较,我看到3 DTO我们有:
1)抽象工厂
> 1个抽象类(有3个抽象方法和3个switch-cases);
> 3个持久化类型的工厂类(每个类有3种获取DTO DAO的方法)
> 3个接口和9个DAO.
2)工厂方法:
> 3个工厂类,每个接口一个(每个有3个开关盒);
>可能我可以创建3个超类来扩展DAO类而不重复代码,例如连接数据库的代码;
> 3个接口和9个DAO.
从代码数量的角度来看,我没有看到任何实质性的差异.
如果您需要添加新的持久性支持或新的接口/ 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第二版中阅读工厂方法.
但是想象一下现实世界之间的差异,请看:
例如
厂
想象一下,你正在建造一所房子,然后你会接近木匠的窗户.你提出要求,他将构建一个窗口.在这种情况下,木匠是一个窗户工厂.您的规格是工厂的输入,窗口是工厂的输出.
抽象工厂
现在,考虑窗口的相同示例.你可以去木匠,或者你可以去窗口商店或PVC商店.他们都是窗户工厂.根据具体情况,您可以决定需要接近哪种工厂.
所以结论 – 这取决于你解决的问题.
标签:abstract-factory,java,design-patterns,dao,factory-method 来源: https://codeday.me/bug/20190928/1825637.html