- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
正如 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/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!