SPRING-SOURCE.RU | |
|
|
Рассмотрим простое приложение по сложению двух чисел и выводу результата. Все приложение можно написать при помощи лишь одного класса Calculate. Что, если нам понадобилось изменить сложение в методе operate на умножение или выводить результат в методе showResult не на экран, а в файл. В этих случаях код программы нужно постоянно менять.
public class Calculate { public Calculate() { } public static void main(String[] args) { Calculate calc = new Calculate(); calc.execute(args); } private void showResult(String result) { System.out.println(result); } private long operate(long op1, long op2) { return op1 + op2; } private String getOpsName() { return " plus "; } public void execute(String [] args) { long op1 = Long.parseLong(args[0]); long op2 = Long.parseLong(args[1]); showResult("The result of " + op1 + getOpsName() + op2 + " is " + operate(op1, op2) + "!"); } }
Нам нужно разъединить логику приложения от математических операций, и от метода сохранения результатов, при помощи интерфейсов. Первый интерфейс будет называться Operation. В нем мы объявим два метода operate(long op1, long op2) и getOpsName(). После этого, если мы захотим сделать сложение, то мы просто будем реализовывать этот интерфейс. Для других математических действий все делаем также.
public interface Operation { long operate(long op1, long op2); String getOpsName(); }
public class OpAdd implements Operation { public OpAdd() { } public String getOpsName() { return " plus "; } public long operate(long op1, long op2) { return op1 + op2; } }
public class OpMultiply implements Operation { public OpMultiply() { } public String getOpsName() { return " times "; } public long operate(long op1, long op2) { return op1 * op2; } }
public class CalculateScreen { private Operation ops = new OpAdd(); private ResultWriter wtr = new ScreenWriter(); public static void main(String[] args) { CalculateScreen calc = new CalculateScreen(); calc.execute(args); } public void execute(String [] args) { long op1 = Long.parseLong(args[0]); long op2 = Long.parseLong(args[1]); wtr.showResult("The result of " + op1 + ops.getOpsName() + op2 + " is " + ops.operate(op1, op2) + "!"); } }
Здесь мы увидели, как монолитное приложение было разъединено на компоненты. Теперь мы имеем OpAdd, OpMultiply и основной класс CalculateScreen. В главном классе мы определяем один из Op* классов и используем его.
Если мы хотим изменить действия, то нужно просто поменять названия классов. Все остальное поменяется автоматически (вывод информации).
Запомните, что у вас должно быть соединение с интернет когда работаете с Maven 2. Потому что Maven 2 автоматически скачивает все зависимости из глобальных репозиториев, где хранятся библиотеки с исходным кодом.
Команда mvn запускает Maven 2. Maven 2 – это инструмент управления проектами, который вы будете использовать.
На рисунке Вы можете увидеть два вида приложений: приложение all-in-one и модульное приложение.
Здесь есть одна небольшая проблема: код CalculateScreen должен быть изменен или перекомпилирован если вам нужно изменить математическую операцию или по другому вывести результат. Код, который создает экземпляры OppAdd и ScreenWriter жестко закодирован в CalculateScreen. Следующая секция демонстрирует, как Spring может нам помочь решить эту проблему.
Copyright © 2024 |