加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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:我的回答是故意不完整的,试着回答这个具体的问题;关于模式及其好处的讨论太大了!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读