Factory方法创建对象

时间:2014-11-16 15:17:22

标签: java inheritance

我还有另外两个类叫做产品,另一个叫做促销产品,促销产品是product.class的扩展,除了产品的功能外,它还可以有奖品。在促销产品类中创建的对象具有受保护的布尔值prizeWinning,可以设置为true或false。现在,产品工厂类描述了一个对象,该对象具有一个方法makeProduct,可以调用该方法来返回一个新的PromotionProduct对象。应该设置ProductFactory类,以便生成的罐的比例是获奖产品,该比例应该是ProductFactory构造函数的参数。我还使用Random类随机决定返回的新PromotionProduct obj是否是获奖产品。

我想给ProductFactory一个代表开关的方法 - 当你单向转动时,makeProduct会返回普通的产品对象 另一方面,makeProduct返回PromotionProduct对象。

我不确定在这种情况下如何做到这一点,我可以使用切换方法吗?

import java.util.ArrayList;
import java.util.Random;

class ProductFactory {

private ArrayList<PromotionProduct> prizeWinning, noPrize;
Random generator = new Random();
protected boolean randomGen = generator.nextBoolean();

public ProductFactory(int p, int a, String cont) {
    int proportion = p;
    int amount = a;
    prizeWinning = new ArrayList<PromotionProduct>();
    noPrize = new ArrayList<PromotionProduct>();
    prizeWinning.add(proportion, makesProduct(cont));
    for (int i = 0; i < proportion; i++) {
        prizeWinning.get(i).prizeWinning = true;
    }
    int left = amount - proportion;
    prizeWinning.add(left, makesProduct(cont));
    for (int i = 0; i < left; i++) {
        noPrize.get(i).prizeWinning = false;
    }
}

public PromotionProduct makesProduct(String cont) {
    return new PromotionProduct(cont);
}

1 个答案:

答案 0 :(得分:0)

您必须根据传入makeProduct的内容区分要返回的对象类型。您也可以将该方法设为静态。我还假设PromotionProduct是Product的子类。类似的东西:

public static Product makesProduct(String cont, Class<?> clazz) {
    if(clazz == Product.class) { 
        return new Product(cont);
    } else if (clazz == PromotionProduct.class) {
        return new PromotionProduct(cont);
    } else {
        throw new IllegalArgumentException("Unsupported type");
    }         
}