37 lines
2.3 KiB
Markdown
37 lines
2.3 KiB
Markdown
# Калькулятор налогов (`03-taxes`)
|
||
|
||
## Формулировка задания
|
||
|
||
Написать класс для подсчета налогового вычета у 3 категорий граждан:
|
||
- Физических лиц - `13%`
|
||
- Индивидуальных предпринимателей - `15%`
|
||
- Самозанятых - `6%`
|
||
|
||
Класс должен предоставлять функцию `calculateTax`, которая принимает категорию налога и сумму, для которой требуется сделать вычисление.
|
||
|
||
## Ожидаемый результат
|
||
|
||
```
|
||
Налог на 100000 для физлица = 13000
|
||
Налог на 1000000 для ИП = 150000
|
||
Налог на 10 для самозанятого = 0.6
|
||
|
||
```
|
||
|
||
## Запуск через Gradle
|
||
|
||
```sh
|
||
gradle run --console=plain
|
||
```
|
||
|
||
## Пояснение к прилагаемому решению
|
||
|
||
Для выбора категории налога в программе реализован паттерн "Стратегия":
|
||
|
||
> Паттерн Стратегия предлагает определить семейство схожих алгоритмов, которые часто изменяются или расширяются, и вынести их в собственные классы, называемые стратегиями.
|
||
>
|
||
> Вместо того, чтобы изначальный класс сам выполнял тот или иной алгоритм, он будет играть роль контекста, ссылаясь на одну из стратегий и делегируя ей выполнение работы. Чтобы сменить алгоритм, вам будет достаточно подставить в контекст другой объект-стратегию.
|
||
>
|
||
> Важно, чтобы все стратегии имели общий интерфейс. Используя этот интерфейс, контекст будет независимым от конкретных классов стратегий. С другой стороны, вы сможете изменять и добавлять новые виды алгоритмов, не трогая код контекста.
|
||
|