如何在子类中使用单例模式?例如,在下面的代码中,itemCatalog扩展了item。我想使用类项的getPrice getter
public class ItemCatalog extends Item{
private static ItemCatalog instance = new ItemCatalog();
private Item itemCatalog[] = new Item[9];
private ItemCatalog(){
}
public static ItemCatalog getInstance(){
return instance;
}
public void populateCatalog(){
itemCatalog[0] = new Item("bb","Baked Beans",35);
itemCatalog[1] = new Item("cf","Cornflakes",100);
itemCatalog[2] = new Item("s0","Sugar",50);
itemCatalog[3] = new Item("tb","Tea Bags",115);
itemCatalog[4] = new Item("ic","Instant Coffee",250);
itemCatalog[5] = new Item("b0","Bread",50);
itemCatalog[6] = new Item("s0","Sausages",130);
itemCatalog[7] = new Item("e0","Eggs",75);
itemCatalog[8] = new Item("m0","Milk",65);
}
public void searchCatalog(String itemCode){
for (int i = 0; i < itemCatalog.length; i++){
if (itemCode.equals(itemCatalog[i].getItemCode())){
price = itemCatalog[i].getItemprice();
break;
}
}
}
编辑2:我希望将此类作为单例和子类的子类,而不是单例。
当我在构造函数中放置super(String itemCode,String description,int price)时出现错误
编辑3:好的我想我用这些代码解决了这个问题。我是java.stilling练习和学习的新手:) ...感谢大家的见解
private ItemCatalog() {
}
private ItemCatalog(String itemCode,String description, int price){
super(itemCode,description, price);
}
编辑4:我不确定这是否正确但是想在类项目中使用getPrice方法返回searchcatalog的结果,这是一个价格。这是正确的设计吗?
答案 0 :(得分:1)
为什么要将它作为子类?子类通常是专门化的(Vehicle - &gt; Car,Bus或Pet - &gt; Cat,Dog)。子类的实例继承其父类的所有字段和方法。我看到你的Item类有一些ID,名称和价格。因此,您的ItemCatalog实例也有ID,名称和价格。我知道你想要的是一个单身人士,但我没有看到它成为Item的子类的原因。你能解释一下这个设计决定的原因吗?
答案 1 :(得分:0)
我不确定问题是什么,但是......
如果您创建实例字段final
,则不需要synchronized
getInstance()
如果静态字段是final,则引用以线程安全的方式初始化,并且不能更改,因此您不需要锁定任何内容来访问它。
答案 2 :(得分:0)
您的设计需要改变。目录需要与项目分开。