我需要一个能够返回自身实例的类。我喜欢单例模式使用的方法,它只返回一次类的实例。但我需要它返回多个实例。
这是我的单身人士模式。如何修改它以使其能够返回多个实例?
public class GrigliaImpl implements Griglia{
private static GrigliaImpl istanza;
private JTextField[][] griglia;
private Color color;
public GrigliaImpl(){
}
@Override
public int getColumn() {
return griglia[0].length;
}
public JTextField[][] getMatrice(){
return this.griglia;
}
@Override
public int getRow() {
return griglia.length;
}
@Override
public void setColor(Color x) {
this.color=x;
}
@Override
public Color getColor() {
return color;
}
public void set(int row,int column){
this.griglia= new JTextField[row][column];
}
public static GrigliaImpl getIstanza(){
if(istanza == null){
istanza = new GrigliaImpl();
}
return istanza;
}
}
答案 0 :(得分:2)
您在谈论工厂模式:
public class MyClass() {
}
public class MyClassFactory() {
public static getNewInstance() {
return new MyClass();
}
}
工厂方法可以包含在您的班级中,您不需要单独的工厂类。
答案 1 :(得分:1)
您的要求存在争议。如果你想拥有一个单例 - 那么根据定义你将拥有这个类的一个实例。如果你想拥有很多实例,那么它就不能是单例。
要创建单例,您需要将构造函数设为私有,并添加静态方法以获取类的实例,该实例将保留为静态字段。 (http://en.wikipedia.org/wiki/Singleton_pattern)
如果要在调用其方法后返回相同的类实例,请考虑使用构建器模式(http://java.dzone.com/articles/dive-builder-pattern)。
public class GrigliaImpl implements Griglia {
private static GrigliaImpl instance;
private GrigliaImpl() {
}
public static GrigliaImpl getInstance() {
if (instance == null) {
instance = GrigliaImpl();
}
return instance;
}
public GrigliaImpl doSomething() {
// do something
return this;
}
}
答案 2 :(得分:0)
具有公共构造函数的每个类的默认行为是使用new运算符创建并返回该类的新实例。但是如果你特别希望实例通过getInstanceMethod而不是make constructor private和
替换
public static GrigliaImpl getIstanza(){
if(istanza == null){
istanza = new GrigliaImpl();
}
return istanza;
}
与
public static GrigliaImpl getIstanza(){
return new GrigliaImpl();
}
但对我来说,没有任何目的。但你仍然可以这样做:)