Как создать свой собственный пользовательский интерфейс, используя Java с примером - PullRequest
0 голосов
/ 28 мая 2018

Я создал интерфейс для своего бизнес-класса.У меня есть бизнес-логика, которая отображает имя.Я хочу отобразить имя с помощью интерфейса.Я слышал, что для того, чтобы скрыть бизнес-логику, мы используем интерфейс, но как мне это сделать?Это то, что я пробовал, но я не знаю, как его использовать.

public interface Business_Logic_Interface {
    public String getName();
}

public class Business_Logic implements Business_Logic_Interface {
    private String name = "I am business data";

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

public class MainApp implements Business_Logic_Interface {
    public static void main(String[] args) {}

    @Override
    public String getName() {
        // TODO Auto-generated method stub
        return null;
    }
}

Я хочу отобразить имя с помощью интерфейса.

Ответы [ 3 ]

0 голосов
/ 28 мая 2018

Интерфейс предназначен для реализации несколькими классами.Это способ добавить уровень абстракции.Он позволяет вам вызывать различные объекты через интерфейс, поэтому вам не нужно беспокоиться о том, каким объектом вы управляете, поскольку вы знаете, что они реализуют ваш интерфейс.

В вашем случае, чтобы показать вам утилиту, которую я добавлювторой класс, реализующий интерфейс:

public class Business_Logic_2 implements Business_Logic_Interface{
    private String name = "I am a second class";

    public String getName() {
        return name + ", hello you !";
    }
}

Затем в вашем основном методе я создаю два разных объекта, один Business_Logic и один Business_logic_2.Затем я помещу их в список Business_Logic_Interface.Делая так, я могу поместить разные объекты в один и тот же список, так как я ожидаю, что объект реализует ваш интерфейс.Позже я могу вызвать метод getName() для объекта, не зная, относятся ли они к типу Business_logic или Business_logic_2.Все, что мне нужно знать, это то, что они реализуют интерфейс.

public class MainApp {
    public static void main(String[] args) {
        Business_logic obj1 = new Business_logic();
        Business_logic_2 obj2 = new Business_logic_2();
        List<Business_Logic_Interface> list = new ArrayList<Business_Logic_Interface>();
        list.add(obj1);
        list.add(obj2);

        for(Business_Logic_Interface bli : list) {
            System.out.println(bli.getName());
        }
    }
}
0 голосов
/ 28 мая 2018

Абстракция скрывает реализацию, но выставляет контракт.

Сказав, что теперь давайте посмотрим, как.Предположим, вы несете ответственность за реализацию бизнес-логики.Теперь вам, вероятно, понадобится некоторое время на построение логики, то же самое модульное тестирование, то же самое на рефакторинг логики, опять же модульное тестирование.Между тем другой команде (или товарищу по команде) необходимо использовать написанную вами логику, но теперь они хотят дождаться завершения вашей логической реализации.

В таком случае вы бы выставили объектТип и его поведение.Тип объекта и поведение становится контрактом, интерфейсом.Интерфейс состоит из его имени и абстрактных методов.Интерфейсы - это не что иное, как предопределенный контракт.Это то, что исправлено, но его реализация может измениться, но поскольку договор является фиксированным, следовательно, изменение всегда придерживается договора, и те, кто зависят от договора, не затрагиваются этим изменением.Имя интерфейса становится типом объекта (конкретный тип будет определен позже).Так что теперь, когда интерфейс открыт, теперь идет часть потребления.

Пользователи вашего кода будут использовать указанный вами контракт.Они, не зная реализации classs, не могут выполнить new, поэтому они потребляют вашу реализацию путем внедрения зависимостей (просто с помощью методов конструктора или сеттера).Даже если потребительский код знает класс реализации сегодня, все же следует избегать зависимости от реализации, поскольку она может измениться завтра.Это зависит от контракта, который является фиксированным.

0 голосов
/ 28 мая 2018

Вы скрываете бизнес-логику внутри класса, чтобы доступ к этому логиту был через интерфейс.MainApp не должен расширять Business_Logic_Interface, он должен содержать переменную с типом Business_Logic_Interface

public class MainApp {
    public static void main(String[] args) {
        Business_Logic_Interface val = new Business_Logic();
        // acces to business logic
        val.getName();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...