как понять конфликт между DIP и синглтоном? - PullRequest
0 голосов
/ 18 февраля 2019

, как говорит DIP, «зависит от абстракций, а не от конкреций».поэтому я кодирую как часть1.Когда я хочу использовать ElfBlackSmith, я пишу «BlackSmith elf = new ElfBlackSmith ()». Проблема в том, что когда я хочу новый ElfBlackSmith, мне нужно создать новый объект.И кажется, что ElfBlackSmith может быть синглтоном.А в некоторых средах, таких как Playframework, это можно сделать как part2.
part1 удовлетворяет DIP, но кажется, что есть некоторая трата;
part2 является прямой и следует за изменением версии java, которая делает методы статичными, но нене удовлетворяет DIP и затрудняет его изменение;
Или, по моему мнению, создайте фабрику в ElfBlackSmith части 1, чтобы сделать ее синглтоном, и, таким образом, часть 1 удовлетворяет обеим требованиям.Но я не видел никого подобного кода.Короче говоря, есть три способа, и какой из них лучше?

part1:

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

part2:

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

part3:

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();

1 Ответ

0 голосов
/ 18 февраля 2019

Я не вижу, что существует конфликт .

Это просто две независимые концепции. Инверсия зависимостей управляет тем, как вы разрабатываете свой код, чтобы избежать неправильного направления зависимостей, что необходимо, например, для правильного повторного использования кода.

Синглтон, с другой стороны, полностью независим от этого.: он просто говорит: существует только один экземпляр некоторой «вещи».

Таким образом, здесь нет «лучшего».С этой точки зрения ваш вопрос похож на: «что лучше, зеленый или яблоки?»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...