gpt4 book ai didi

java - 如何理解DIP和单例之间的冲突?

转载 作者:行者123 更新时间:2023-12-02 10:15:06 26 4
gpt4 key购买 nike

正如 DIP 所说,“依赖于抽象,而不是具体。”所以我的代码类似于第 1 部分。当我想使用 ElfBlackSmith 时,我编码“BlackSmith elf = new ElfBlackSmith()”。问题是每当我想要一个新的 ElfBlackSmith 时,我需要创建一个新的相同对象。看来 ElfBlackSmith 可以是单例。在某些框架(例如 Playframework)中,可以像第 2 部分一样完成。
第1部分满足DIP,但似乎有一些浪费;
第2部分是直接的,它跟随java版本的变化,使方法静态化,但不满足DIP,难以更改;
或者,在我看来,在part1的ElfBlackSmith中放置一个工厂,使其成为单例,从而part1满足两者。但我还没见过有人写过这样的代码。简而言之,共有三种方式,哪一种更好?

第 1 部分:

Interface BlackSmith{ int make(); }         
class ElfBlackSmith implements BlackSmith{ int make( return 1;)}
class OrcBlackSmith implements BlackSmith{ int make( return 2;)}

第二部分:

class ElfBlackSmith { static int make( return 1;)}  
class OrcBlackSmith { static int make( return 2;)}

第三部分:

Interface BlackSmith{ int make();}
class ElfBlackSmith{
private static final ElfBlackSmith INSTANCE = new ElfBlackSmith();
public static ElfBlackSmith getInstance(){return INSTANCE;}
int make( return 1;)
}

第 1 部分用法:

BlackSmith elf = new ElfBlackSmith();
elf.make();

第 2 部分用法:

ElfBlackSmith.make();

第3部分用法:

BlackSmith elf = ElfBlackSmith.getInstance();
elf.make();

最佳答案

我没有看到存在冲突

这只是两个独立的概念。 依赖倒置指导您如何设计代码,以避免依赖关系走向错误的方向,例如,您需要启用正确的代码重用。

另一方面,Singleton 完全独立于这一点:它只是说:某个“事物”只有一个实例。

因此这里没有“更好”。从这个角度来看,你的问题类似于:“绿色和苹果哪个更好?”

关于java - 如何理解DIP和单例之间的冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54742653/

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