Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建对象的工厂方法_Java_Inheritance - Fatal编程技术网

Java 创建对象的工厂方法

Java 创建对象的工厂方法,java,inheritance,Java,Inheritance,我还有另外两个类,一个叫product,另一个叫promotion product,promotion product是product.class的扩展,除了产品的功能外,里面还可以有奖品。在促销产品类中创建的对象具有受保护的布尔PrizeWining,可以设置为true或false。现在product factory类描述了一个对象,该对象具有一个方法makeProduct,可以调用该方法返回一个新的PromotionProduct对象。ProductFactory类的设置应确保所生产的罐头中

我还有另外两个类,一个叫product,另一个叫promotion product,promotion product是product.class的扩展,除了产品的功能外,里面还可以有奖品。在促销产品类中创建的对象具有受保护的布尔PrizeWining,可以设置为true或false。现在product factory类描述了一个对象,该对象具有一个方法makeProduct,可以调用该方法返回一个新的PromotionProduct对象。ProductFactory类的设置应确保所生产的罐头中有一定比例是获奖产品,该比例应成为ProductFactory构造函数的一个论据。此外,我还使用Random类对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);
}

您必须根据传入makesProduct的内容区分要返回的对象类型。您还可以将该方法设置为静态。我还假设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");
    }         
}

这是一个好的开始。现在@傻瓜需要返回并实现随机生成器/比例。此外,您不需要两个单独的ArrayList。只需使用一个ArrayList myList=new ArrayList;