假设我有一个名为apple的对象
Apple apple = new Apple();
我有一个名为AppleHolder
的课程,如下所示:
class AppleHolder{
private Apple apple;
public AppleHolder(Apple apple){
this.apple = apple;
}
}
Apple
个实例不能超过1个AppleHolder
。但是,当然,当我这样做时:
AppleHolder appleHolder1 = new AppleHolder(apple);
AppleHolder appleHolder2 = new AppleHolder(apple);
这会使apple
看起来好像有两个持有者只有1个。是否有设计模式使第二个实例化返回appleHolder1
而不是?
感谢。
答案 0 :(得分:1)
你正在寻找一种叫做单身人士模式的东西。
通常,您需要一个辅助方法来获取实例,而不是使用构造函数。
例如:
class AppleHolder {
static private AppleHolder apple = null;
// prevent any object construction outside of this class
private AppleHolder() {
}
public synchronized AppleHolder getInstance() {
if (null == apple) {
apple = new AppleHolder();
}
return apple;
}
}
synchronized关键字有助于确保不存在任何并发问题 并且你的构造函数可以为单例实例做任何你想做的事。
还有其他方法可以解决这个问题,Joshua Bloch的书 Effective Java 围绕它进行了一些很好的讨论,你可以在" Singleton Pattern"上进行网络搜索。找到更多。
答案 1 :(得分:1)
我相信你正在寻找类似Singleton模式的东西,只限制对象之间的关系,而不是实例化。
修改为您的用例(假设Apple
和AppleHolder
之间存在一对一的关系),它看起来像:
class Apple {
private AppleHolder appleHolder;
public AppleHolder getAppleHolder() {
return this.appleHolder;
}
// Rest of class...
}
class AppleHolder {
private Apple apple;
private AppleHolder(Apple apple) {
this.apple = apple;
}
public static AppleHolder getAppleHolder(Apple apple) {
if(apple.getAppleHolder() != null) {
return apple.getAppleHolder();
} else {
return new AppleHolder(apple);
}
}
}
在上面的代码中,Apple
只能有一个AppleHolder
而AppleHolder
只能有一个Apple
。
不是调用AppleHolder
的构造函数,而是调用静态方法:AppleHolder.getAppleHolder(apple);
。
如果提供的AppleHolder
已存在Apple
,则会返回该AppleHolder
的{{1}}。
否则,会创建并返回新的Apple
。