java – 了解抽象工厂模式
发布时间:2020-12-15 04:17:52 所属栏目:Java 来源:网络整理
导读:我已经在 wiki上读过关于抽象工厂模式的内容.但是我不明白使用这种模式真的有利可图.你能得到一个很难避免抽象工厂模式的例子吗?请考虑以下Java代码: public abstract class FinancialToolsFactory { public abstract TaxProcessor createTaxProcessor();
我已经在
wiki上读过关于抽象工厂模式的内容.但是我不明白使用这种模式真的有利可图.你能得到一个很难避免抽象工厂模式的例子吗?请考虑以下Java代码:
public abstract class FinancialToolsFactory { public abstract TaxProcessor createTaxProcessor(); public abstract ShipFeeProcessor createShipFeeProcessor(); } public abstract class ShipFeeProcessor { abstract void calculateShipFee(Order order); } public abstract class TaxProcessor { abstract void calculateTaxes(Order order); } // Factories public class CanadaFinancialToolsFactory extends FinancialToolsFactory { public TaxProcessor createTaxProcessor() { return new CanadaTaxProcessor(); } public ShipFeeProcessor createShipFeeProcessor() { return new CanadaShipFeeProcessor(); } } public class EuropeFinancialToolsFactory extends FinancialToolsFactory { public TaxProcessor createTaxProcessor() { return new EuropeTaxProcessor(); } public ShipFeeProcessor createShipFeeProcessor() { return new EuropeShipFeeProcessor(); } } // Products public class EuropeShipFeeProcessor extends ShipFeeProcessor { public void calculateShipFee(Order order) { // insert here Europe specific ship fee calculation } } public class CanadaShipFeeProcessor extends ShipFeeProcessor { public void calculateShipFee(Order order) { // insert here Canada specific ship fee calculation } } public class EuropeTaxProcessor extends TaxProcessor { public void calculateTaxes(Order order) { // insert here Europe specific tax calculation } } public class CanadaTaxProcessor extends TaxProcessor { public void calculateTaxes(Order order) { // insert here Canada specific tax calculation } } 如果我们需要在代码中在代码中创建1-2次以下的对象,那么我们可以只使用new运算符.为什么我们需要抽象工厂? 解决方法
你错过了一半的工作:)
void processOrder(FinancialToolsFactory ftf,Order o) { tft.createTaxProcessor().calculateTaxes(o); tft.createShipFeeProcessor().calculateShipFee(o); } 此代码与您传递FinancialToolsFactory的加拿大或欧洲实现一样有效(您可以将实现者类外部化为外部资源,并使用Class.newInstance()进行实例化). 在这种情况下,模式使用的一个真正好处是不是编写实现模式的代码,而是使用该代码的代码! PS:我的回答是故意不完整的,试着回答这个具体的问题;关于模式及其好处的讨论太大了! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |