Java 创建对象的工厂方法
我还有另外两个类,一个叫product,另一个叫promotion product,promotion product是product.class的扩展,除了产品的功能外,里面还可以有奖品。在促销产品类中创建的对象具有受保护的布尔PrizeWining,可以设置为true或false。现在product factory类描述了一个对象,该对象具有一个方法makeProduct,可以调用该方法返回一个新的PromotionProduct对象。ProductFactory类的设置应确保所生产的罐头中有一定比例是获奖产品,该比例应成为ProductFactory构造函数的一个论据。此外,我还使用Random类对obj返回的新促销产品是否为获奖产品进行随机决策 我想给ProductFactory一个表示开关的方法——当您将其转到一个方向时,makeProduct将在您转到另一个方向时返回普通的产品对象 另一方面,makeProduct返回PromotionProduct对象 我不确定如何在这种情况下做到这一点,我可以使用开关方法吗Java 创建对象的工厂方法,java,inheritance,Java,Inheritance,我还有另外两个类,一个叫product,另一个叫promotion product,promotion product是product.class的扩展,除了产品的功能外,里面还可以有奖品。在促销产品类中创建的对象具有受保护的布尔PrizeWining,可以设置为true或false。现在product factory类描述了一个对象,该对象具有一个方法makeProduct,可以调用该方法返回一个新的PromotionProduct对象。ProductFactory类的设置应确保所生产的罐头中
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;