我创建了一个公共函数method(),它在类Singleton(HouseCreator)内定义,用于添加新对象。但是我不知道如何在其中调用或获取对象。
谢谢!
这是我的源代码:
这是我的主班>
public class TestSingleton {
public static void main(String[] args) {
HouseCreator hc = HouseCreator.getInstance();
House h1 = hc.createHouse("A5B6","red");
House h2 = hc.createHouse("GP44","blue");
}
}
和
class HouseCreator{
private static HouseCreator instance = new HouseCreator();
private HouseCreator(){
}
public static HouseCreator getInstance(){
return instance;
}
public House createHouse(String address,String color){
boolean alreadyCreate = true;
if(alreadyCreate){
return null;
}else{
return new House(address, color);
}
}
}
class House{
private String address;
private String color;
public House() {
}
public House(String address, String color) {
this.address = address;
this.color = color;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
答案 0 :(得分:0)
如果目的是永远不要创建两次 same House
,那么就不要实例化2个外观和颜色相同的房屋,可以将它们存储在{{1 }}
如果您要查找的房子已经在列表中,您将得到它(新的即时实例将被丢弃),如果不保留,请立即将其添加到列表中
List
然后在class HouseCreator{
private static HouseCreator instance = new HouseCreator();
private List<House> houses;
private HouseCreator(){
houses = new ArrayList<>();
}
public static HouseCreator getInstance(){
return instance;
}
public House createHouse(String address,String color){
House h = new House(address, color);
int indexOf = houses.indexOf(h);
if(indexOf < 0){
houses.add(h);
return h;
}else{
return houses.get(indexOf);
}
}
}
类中添加House
方法
equals
答案 1 :(得分:-1)
您需要将自己创建的房屋存储在某个地方。
它们是根据地址和颜色创建的-这是关键,这是您需要跟踪它们的方式:
import java.util.HashMap;
import java.util.Map;
class HouseCreator {
private static HouseCreator instance = new HouseCreator();
private final Map<HouseKey, House> createdHouses = new HashMap<>();
private HouseCreator() {
}
public static HouseCreator getInstance() {
return instance;
}
public House createHouse(String address, String color) {
return createdHouses.computeIfAbsent(new HouseKey(address, color), x -> new House(address, color));
}
}
class HouseKey {
private String address;
private String color;
public HouseKey(String address, String color) {
this.address = address;
this.color = color;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((address == null) ? 0 : address.hashCode());
result = prime * result + ((color == null) ? 0 : color.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
HouseKey other = (HouseKey) obj;
if (address == null) {
if (other.address != null)
return false;
} else if (!address.equals(other.address))
return false;
if (color == null) {
if (other.color != null)
return false;
} else if (!color.equals(other.color))
return false;
return true;
}
}
class House {
private String address;
private String color;
public House() {
}
public House(String address, String color) {
this.address = address;
this.color = color;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}