Как использовать больше реализаций одного интерфейса в одном классе? - PullRequest
2 голосов
/ 19 мая 2019

Я хотел бы попросить вас помочь в решении следующей проблемы.

Есть интерфейс, который имеет больше реализаций:

public interface MyInterface {
    void method();
}
public class MyInterfaceA implements MyInterface
public class MyInterfaceB implements MyInterface

и существует класс, который использует эти реализации интерфейса в своих различных методах:

public class MyClass {
    public void firstMethod() {
        new MyInterfaceA().method();
    }
    public void secondMethod() {
        new MyInterfaceB().method();
    }
}

Моя проблема в том, что я не хотел бы создавать новые конкретные экземпляры в методах класса, поэтому я как-то хотел бы скрыть, какая реализация используется.

Знаете ли вы хорошее решение для этого? Есть ли шаблон дизайна, который я могу использовать? Как я могу скрыть конкретные реализации или я не могу?

Спасибо за ваши ответы заранее!

Ответы [ 2 ]

2 голосов
/ 19 мая 2019

Например, вы можете получить реализации в конструкторе MyClass и в дальнейшем использовать его.Это поможет вам скрыть конкретные реализации.

public class MyClass {

    private MyInterface one;
    private MyInterface two;

    private MyClass(MyInterface one, MyInterface two) {
        this.one = one;
        this.two = two;
    }

    public void firstMethod() {
        one.method();
    }
    public void secondMethod() {
        two.method();
    }
}
1 голос
/ 19 мая 2019

Вы можете применить шаблон Factory:

class Factory {
    public MyInterface a() { return new MyInterfaceA(); }
    public MyInterface b() { return new MyInterfaceB(); }
}

public class MyClass {
    private Factory factory;
    public MyClass(Factory factory) { this.factory = factory; }
    public void firstMethod() {
        factory.a().method();
    }
    public void secondMethod() {
        factory.b().method();
    }
}

Внутри класса Factory вы можете кэшировать объекты, созданные при необходимости.

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