我试图通过让我们说出来开发一些东西:
一类:用户
User的几个实例:" john"," joe",...
我希望每个名称只实例一次,因此如果用户尝试创建一个已存在的用户名,它将返回现有的用户实例。
单身人士,我只能做一个例子
我怎么能这样做?
答案 0 :(得分:2)
您所寻找的是工厂模式 让工厂缓存创建的实例并在它们存在时返回它们。
您可以通过多种方式实现它:静态方法,单例模式:枚举类或经典单例或静态依赖注入。
请注意,如果同时访问工厂,则实现还应考虑同步对缓存用户的对象的访问。
以下是枚举方式和线程安全的示例。
由枚举实现的接口(非强制性但更清晰,更具扩展性):
public interface IUserFactory {
User getUser(String user);
}
Enum工厂:
public enum UserFactory implements IUserFactory {
INSTANCE;
private Map<String, User> map = new ConcurrentHashMap<>();
@Override
public User getUser(String username) {
User user = map.get(username);
if (user != null) {
return user;
}
synchronized (INSTANCE) {
final User user = new User(username);
map.put(username, user);
return user;
}
}
}
答案 1 :(得分:1)
创建一个UserFactory
类,然后向其中添加一个方法,例如User getUser(String name)
。
另外,使User
的contructor包为private,以确保只有UserFactory
(属于同一个包)才能实例化新的User
个对象。
有关工厂模式的更多信息,请参阅https://en.wikipedia.org/wiki/Factory_method_pattern。