首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何确保只初始化一个实例,而不是从另一个类初始化?

如何确保只初始化一个实例,而不是从另一个类初始化?
EN

Stack Overflow用户
提问于 2018-05-22 17:18:55
回答 4查看 1.5K关注 0票数 2

我最近读到了关于单例原则的文章,但是如果构造函数是private的话,我不太清楚如何初始化一个类的单个实例,形成另一个类。如果构造函数应该是private,那么如何从另一个类中设置参数?

代码语言:javascript
复制
public class Player {

    String name;
    Position p;
    Inventory i;

    private Player(String name, Position p, Inventory i){

    }

    static {
        instance = 
    }

    public static Player getPlayer(){
        return instance;
    }

}
EN

Stack Overflow用户

发布于 2018-05-22 17:30:34

基本上,使用这种方法可以隐藏构造函数(private),并公开获取instance的静态方法。在方法中,检查instance if null,如果是,则使用提供的参数对其进行初始化。

最后,返回instance

注意到在这里,如果您不止一次调用getPlayer方法,那么实例将被创建(在进一步调用方法getPlayer时将是相同的),在第一次调用静态方法时提供的参数将是相同的。

代码语言:javascript
复制
public class Player {

    String name;
    Position p;
    Inventory i;

    private static Player instance;

    private Player(String name, Position p, Inventory i){
        // ...
    }

    public static Player getPlayer(String name, Position p, Inventory i){
        if (instance == null) {
            instance = new Player(name, p, i);
        }
        return instance;
    }

}

此外,如果您想正确地使用单例模式,那么在创建实例之后,不应该设置属性(没有setters方法)。

票数 1
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50473284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档