为了账号安全,请及时绑定邮箱和手机立即绑定

Singleton的替代方案是什么

Singleton的替代方案是什么

Qyouu 2019-10-14 14:17:13
我们有一个类,其中包含应用程序的配置信息。它曾经是一个单身人士。经过一些体系结构审查后,我们被告知删除单例。我们确实看到了在单元测试中不使用单例的一些好处,因为我们可以一次测试所有不同的配置。没有单例,我们必须在代码中的所有地方传递实例。变得太乱了,所以我们写了一个单例包装器。现在我们将相同的代码移植到PHP和.NET,我想知道是否有更好的模式可用于配置对象。
查看完整描述

3 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

在谷歌测试博客有一系列的关于避免(以创建可测试的代码)辛格尔顿条目。也许这可以帮助您:


使用依赖注入避免单例

单身人士是病态的骗子

单身人士的根本原因

单身人士去哪儿了?

上一篇文章详细解释了如何将新对象的创建移入工厂,因此可以避免使用单例。值得一读。


简而言之,我们将所有新的操作员移至工厂。我们将寿命相似的所有对象归为一个工厂。


查看完整回答
反对 回复 2019-10-14
?
慕后森

TA贡献1802条经验 获得超5个赞

不要累积对单个配置对象的责任,因为它会以难以理解且脆弱的非常大的对象结尾。


例如,如果您需要特定类的另一个参数Configuration,则可以更改对象,然后重新编译使用该对象的所有类。这有些问题。


尝试重构您的代码,以避免一个通用的全局Configuration对象。仅将必需的参数传递给客户端类:


class Server {


    int port;


    Server(Configuration config) {

        this.port = config.getServerPort();

    } 


}

应该重构为:


 class Server {


    public Server(int port) {

       this.port = port;

    }

 }

一个依赖注入框架将有很大的帮助在这里,但它不是stricly要求。


查看完整回答
反对 回复 2019-10-14
  • 3 回答
  • 0 关注
  • 673 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信