gpt4 book ai didi

design-patterns - GOF 单例模式有任何可行的替代方案吗?

转载 作者:行者123 更新时间:2023-12-03 05:01:31 26 4
gpt4 key购买 nike

让我们面对现实吧。单例模式是 highly controversial围墙两边都有大批程序员的话题。有些人觉得 Singleton 只不过是一个美化的全局变量,而另一些人则坚信模式并不断使用它。我不想要Singleton Controversy然而,这是我问题的核心。 每个人都可以进行一场拔河比赛,看看谁会获胜。我想说的是,我不相信有一个正确的答案,我也不是故意煽动党派之争。当我提出问题时,我只是对singleton-alternatives感兴趣:

他们有 GOF 单例模式的具体替代方案吗?

例如,当我过去多次使用单例模式时,我只是对保留一个或多个变量的状态/值感兴趣。但是,可以使用静态变量而不是使用单例模式在类的每个实例化之间保留变量的状态/值。

你还有什么其他想法吗?

编辑:我真的不希望这是另一篇关于“如何正确使用单例”的文章。再次,我正在寻找避免这种情况的方法。为了好玩,好吗?我想我是在用你最好的电影预告片声音问一个纯粹的学术问题,“在一个没有单例的平行宇宙中,我们能做什么?”

最佳答案

要了解解决单例问题的正确方法,您需要了解单例问题(以及一般的全局状态):

单例隐藏依赖关系。

为什么这很重要?

因为如果隐藏依赖项,您往往会失去耦合量。

你可能会争辩说

void purchaseLaptop(String creditCardNumber, int price){
CreditCardProcessor.getInstance().debit(creditCardNumber, amount);
Cart.getInstance().addLaptop();
}

简单
void purchaseLaptop(CreditCardProcessor creditCardProcessor, Cart cart, 
String creditCardNumber, int price){
creditCardProcessor.debit(creditCardNumber, amount);
cart.addLaptop();
}

但至少第二个 API 清楚地表明了该方法的协作者是什么。

因此,解决单例的方法不是使用静态变量或服务定位器,而是将单例类更改为实例,这些实例在它们有意义的范围内实例化,并注入(inject)到需要它们的组件和方法中。您可以使用 IoC 框架来处理此问题,也可以手动执行此操作,但重要的是摆脱全局状态并明确依赖关系和协作。

关于design-patterns - GOF 单例模式有任何可行的替代方案吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/162042/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com