diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9f11b75 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea/ diff --git a/HomeWork.iml b/HomeWork.iml new file mode 100644 index 0000000..c90834f --- /dev/null +++ b/HomeWork.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/ru/gb/family_tree/Main.java b/src/ru/gb/family_tree/Main.java new file mode 100644 index 0000000..19d13e3 --- /dev/null +++ b/src/ru/gb/family_tree/Main.java @@ -0,0 +1,17 @@ +package ru.gb.family_tree; + +import ru.gb.family_tree.view.ConsoleUI; +import ru.gb.family_tree.view.View; + +public class Main { + public static void main(String[] args) { + + View view = new ConsoleUI(); + view.start(); + + + + } + + +} diff --git a/src/ru/gb/family_tree/model/FamilyTree.java b/src/ru/gb/family_tree/model/FamilyTree.java new file mode 100644 index 0000000..2c96f39 --- /dev/null +++ b/src/ru/gb/family_tree/model/FamilyTree.java @@ -0,0 +1,53 @@ +package ru.gb.family_tree.model; + +import ru.gb.family_tree.model.comparators.ComparatorByAge; +import ru.gb.family_tree.model.comparators.ComparatorByName; +import ru.gb.family_tree.model.iterators.MemberIterator; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +/** + * Выполнятся принцип "I" (разделение интерфейсов) + * + */ +public class FamilyTree implements Serializable, Iterable { + + private final List familyTree = new ArrayList(); + + public FamilyTree() { + } + + + public void addFamilyTreeMember(T member) { + familyTree.add(member); + } + + @Override + public String toString() { + StringBuilder stringBuilder = new StringBuilder(); + for (T member : familyTree) { + stringBuilder.append(member); + } + return stringBuilder.toString(); + } + + public void addParent(T parent, T child) { + if (parent.getGender().equals(Gender.MALE)) { + child.setFather(parent); + } else child.setMother(parent); + parent.addChild(child); + } + + public void sortByName() { + familyTree.sort(new ComparatorByName<>()); + } + public void sortByAge() { familyTree.sort(new ComparatorByAge<>()); } + + @Override + public Iterator iterator() { + return new MemberIterator<>(familyTree); + } +} diff --git a/src/ru/gb/family_tree/model/Gender.java b/src/ru/gb/family_tree/model/Gender.java new file mode 100644 index 0000000..bca6f98 --- /dev/null +++ b/src/ru/gb/family_tree/model/Gender.java @@ -0,0 +1,9 @@ +package ru.gb.family_tree.model; + +import java.io.Serializable; + +public enum Gender implements Serializable { + FEMALE, + MALE + +} diff --git a/src/ru/gb/family_tree/model/Member.java b/src/ru/gb/family_tree/model/Member.java new file mode 100644 index 0000000..b08651a --- /dev/null +++ b/src/ru/gb/family_tree/model/Member.java @@ -0,0 +1,21 @@ +package ru.gb.family_tree.model; + +import java.time.LocalDate; + +public abstract class Member { + + + abstract public Gender getGender(); + + abstract public void setFather(T father); + + abstract public void setMother(T mother); + + abstract public void addChild(T child); + + abstract public LocalDate getDateOfBirth(); + + abstract public String getName(); + + +} diff --git a/src/ru/gb/family_tree/model/Person.java b/src/ru/gb/family_tree/model/Person.java new file mode 100644 index 0000000..a30ce9c --- /dev/null +++ b/src/ru/gb/family_tree/model/Person.java @@ -0,0 +1,97 @@ +package ru.gb.family_tree.model; + +import java.io.Serializable; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +/** +Выполняется принцип S (Единственной ответственности) + **/ +public class Person extends Member implements Serializable { + + private String name; + private Gender gender; + private LocalDate dateOfDeath; + private LocalDate dateOfBirth; + private Person father, mother; + private final List children = new ArrayList<>(); + + public List getChildren() { + return children; + } + public Person(String name, Gender gender) { + this.name = name; + this.gender = gender; + } + + public Person(String name) { + this.name = name; + } + + public Person(){ + this ("unknown"); + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public Gender getGender() { + return gender; + } + + public void setGender(Gender gender) { + this.gender = gender; + } + + public LocalDate getDateOfDeath() { + return dateOfDeath; + } + + public void setDateOfDeath(LocalDate dateOfDeath) { + this.dateOfDeath = dateOfDeath; + } + + public LocalDate getDateOfBirth() { + return dateOfBirth; + } + + public void setDateOfBirth(LocalDate dateOfBirth) { + this.dateOfBirth = dateOfBirth; + } + + public Person getFather() { + return father; + } + @Override + public void setFather(Person father) { + this.father = father; + + } + + public Person getMother() { + return mother; + } + @Override + public void setMother(Person mother) { + this.mother = mother; + + } + + @Override + public void addChild(Person child) { + children.add(child); + } + + @Override + public String toString() { + return "Человек по имени " + name; + } + + +} diff --git a/src/ru/gb/family_tree/model/comparators/ComparatorByAge.java b/src/ru/gb/family_tree/model/comparators/ComparatorByAge.java new file mode 100644 index 0000000..0ed204b --- /dev/null +++ b/src/ru/gb/family_tree/model/comparators/ComparatorByAge.java @@ -0,0 +1,18 @@ +package ru.gb.family_tree.model.comparators; + +import ru.gb.family_tree.model.Member; + +import java.util.Comparator; + +public class ComparatorByAge implements Comparator { + @Override + public int compare(T o1, T o2) { + + if (o1.getDateOfBirth().isBefore(o2.getDateOfBirth()) ) + return 1; + else if (o1.getDateOfBirth().isAfter(o2.getDateOfBirth())) + return -1; + else + return 0; + } +} diff --git a/src/ru/gb/family_tree/model/comparators/ComparatorByName.java b/src/ru/gb/family_tree/model/comparators/ComparatorByName.java new file mode 100644 index 0000000..47f6c1e --- /dev/null +++ b/src/ru/gb/family_tree/model/comparators/ComparatorByName.java @@ -0,0 +1,13 @@ +package ru.gb.family_tree.model.comparators; + +import ru.gb.family_tree.model.Member; + +import java.util.Comparator; + +public class ComparatorByName implements Comparator { + + @Override + public int compare(T o1, T o2) { + return o1.getName().compareTo(o2.getName()); + } +} diff --git a/src/ru/gb/family_tree/model/iterators/MemberIterator.java b/src/ru/gb/family_tree/model/iterators/MemberIterator.java new file mode 100644 index 0000000..2588839 --- /dev/null +++ b/src/ru/gb/family_tree/model/iterators/MemberIterator.java @@ -0,0 +1,23 @@ +package ru.gb.family_tree.model.iterators; + +import java.util.Iterator; +import java.util.List; + +public class MemberIterator implements Iterator { + private int index = 0; + private final List listMembers; + + public MemberIterator(List listMembers) { + this.listMembers = listMembers; + } + + @Override + public boolean hasNext() { + return index < listMembers.size(); + } + + @Override + public T next() { + return listMembers.get(index++); + } +} diff --git a/src/ru/gb/family_tree/model/service/Builder.java b/src/ru/gb/family_tree/model/service/Builder.java new file mode 100644 index 0000000..380d426 --- /dev/null +++ b/src/ru/gb/family_tree/model/service/Builder.java @@ -0,0 +1,23 @@ +package ru.gb.family_tree.model.service; + +import ru.gb.family_tree.model.Member; + +import java.time.LocalDate; + +public abstract class Builder { + protected T member; + + abstract Builder create(); + + abstract Builder buildName(String name); + + abstract Builder buildDateOfBirth(LocalDate date); + + abstract Builder buildDateOfDeath(LocalDate date); + + + public T build() { + return member; + } + +} diff --git a/src/ru/gb/family_tree/model/service/PersonBuilder.java b/src/ru/gb/family_tree/model/service/PersonBuilder.java new file mode 100644 index 0000000..b980ffc --- /dev/null +++ b/src/ru/gb/family_tree/model/service/PersonBuilder.java @@ -0,0 +1,33 @@ +package ru.gb.family_tree.model.service; + +import ru.gb.family_tree.model.Person; + +import java.time.LocalDate; + +public class PersonBuilder extends Builder { + + + @Override + PersonBuilder create() { + member = new Person(); + return this; + } + + @Override + PersonBuilder buildName(String name) { + member.setName(name); + return this; + } + + @Override + PersonBuilder buildDateOfBirth(LocalDate date) { + member.setDateOfBirth(date); + return this; + } + + @Override + PersonBuilder buildDateOfDeath(LocalDate date) { + member.setDateOfDeath(date); + return this; + } +} diff --git a/src/ru/gb/family_tree/model/service/Service.java b/src/ru/gb/family_tree/model/service/Service.java new file mode 100644 index 0000000..0262e9e --- /dev/null +++ b/src/ru/gb/family_tree/model/service/Service.java @@ -0,0 +1,71 @@ +package ru.gb.family_tree.model.service; + +import ru.gb.family_tree.model.FamilyTree; +import ru.gb.family_tree.model.Gender; +import ru.gb.family_tree.model.Person; +import ru.gb.family_tree.model.writer.Writable; + +import java.time.LocalDate; + +public class Service { + + private FamilyTree familyTree = new FamilyTree<>(); + + + + public void addFamilyTreeMember(String name, String sGender) { + Gender gender; + if (sGender.equals("M")) + gender = Gender.MALE; + else + gender = Gender.FEMALE; + Person person = new Person(name, gender); + familyTree.addFamilyTreeMember(person); + + } + + public String getFamilyTreeInfo() { +// StringBuilder stringBuilder = new StringBuilder(); +// for (Person person : familyTree) { +// stringBuilder.append(person); +// } +// return stringBuilder.toString(); + return familyTree.toString(); + + } + + public void sortByName() { + familyTree.sortByName(); + } + + public void sortByAge() { + familyTree.sortByAge(); + } + + public void addParent(Person person, Person child) { + familyTree.addParent(person, child); + } + + + public void save(Writable writable) { + + writable.save(familyTree); + + } + + public void load(Writable writable) { + + familyTree = (FamilyTree) writable.load(); + + } + + void Personmake() { + PersonBuilder personBuilder = new PersonBuilder(); + Person person = personBuilder + .create() + .buildName("Petya") + .buildDateOfBirth(LocalDate.now()) + .buildDateOfDeath(LocalDate.now()) + .build(); + } +} diff --git a/src/ru/gb/family_tree/model/writer/FileHandler.java b/src/ru/gb/family_tree/model/writer/FileHandler.java new file mode 100644 index 0000000..f29cbe5 --- /dev/null +++ b/src/ru/gb/family_tree/model/writer/FileHandler.java @@ -0,0 +1,44 @@ +package ru.gb.family_tree.model.writer; + +import java.io.*; + +/* +Принцип "D" на базовом уровне частный FileHandler знает об интерфейсе Writable, но более общий интерфейс Writable + не знает о классе FileHandler. + */ + +public class FileHandler implements Writable { + + @Override + public void save(Serializable serializable) { + + ObjectOutputStream objectOutputStream = null; + try { + objectOutputStream = new ObjectOutputStream(new FileOutputStream("person.out")); + objectOutputStream.writeObject(serializable); + objectOutputStream.close(); + + } catch (IOException e) { + + throw new RuntimeException(e); + } + + } + + @Override + public Object load() { + ObjectInputStream objectInputStream = null; + try { + objectInputStream = new ObjectInputStream(new FileInputStream("person.out")); + Object familyTree = objectInputStream.readObject(); + //System.out.println(familyTree); + + objectInputStream.close(); + + return familyTree; + } catch (Exception e) { + throw new RuntimeException(e); + } + + } +} diff --git a/src/ru/gb/family_tree/model/writer/Writable.java b/src/ru/gb/family_tree/model/writer/Writable.java new file mode 100644 index 0000000..7193e89 --- /dev/null +++ b/src/ru/gb/family_tree/model/writer/Writable.java @@ -0,0 +1,9 @@ +package ru.gb.family_tree.model.writer; + +import java.io.Serializable; + +public interface Writable { + void save(Serializable serializable) ; + Object load (); + +} diff --git a/src/ru/gb/family_tree/presenter/Presenter.java b/src/ru/gb/family_tree/presenter/Presenter.java new file mode 100644 index 0000000..c2d0d86 --- /dev/null +++ b/src/ru/gb/family_tree/presenter/Presenter.java @@ -0,0 +1,44 @@ +package ru.gb.family_tree.presenter; + +import ru.gb.family_tree.model.service.Service; +import ru.gb.family_tree.model.writer.FileHandler; +import ru.gb.family_tree.view.View; + +public class Presenter { + private View UI; + private Service service; + + + public Presenter(View UI) { + + this.UI = UI; + this.service = new Service(); + } + + public void addFamilyTreeMember(String name, String sGender) { + service.addFamilyTreeMember(name, sGender); + + } + + public void getFamilyTreeInfo() { + String info = service.getFamilyTreeInfo(); + UI.print(info); + } + + public void sortByName() { + service.sortByName(); + } + + public void sortByAge() { + service.sortByAge(); + + } + + public void saveToFile() { + service.save(new FileHandler()); + } + + public void loadFromFile() { + service.load(new FileHandler()); + } +} diff --git a/src/ru/gb/family_tree/view/ConsoleUI.java b/src/ru/gb/family_tree/view/ConsoleUI.java new file mode 100644 index 0000000..c3381d1 --- /dev/null +++ b/src/ru/gb/family_tree/view/ConsoleUI.java @@ -0,0 +1,141 @@ +package ru.gb.family_tree.view; + +import ru.gb.family_tree.presenter.Presenter; + +import java.util.Scanner; +/* +Выполняется принцип "О" - принцип открытости - закрытости. Можно бесконечно расширять функционал класса. +Нарушается в методе "printMenu" + */ + +public class ConsoleUI implements View { + + private static final String INPUT_ERROR = "Вы ввели неверное значение"; + private final Scanner scanner; + private boolean work; + private static int N = 0; + private Presenter presenter; + private MainMenu menu; + + + public ConsoleUI() { + scanner = new Scanner(System.in); + presenter = new Presenter(this); + work = true; + menu = new MainMenu(this); + + } + + @Override + public void print(String text) { + System.out.println(text); + } + + @Override + public void printf(String text, String placeHolder) { + System.out.printf(text, placeHolder); + } + + @Override + public String read() { + return scanner.nextLine(); + } + + @Override + public void start() { + hello(); + while (work) { + printMenu(); + execute(); + } + } + + @Override + public void finish() { + System.out.println("Приятно было пообщаться"); + work = false; + } + + private void hello() { + System.out.println("Доброго времени суток!"); + } + + private void execute(){ + String line = scanner.nextLine(); + if (checkTextForInt(line)){ + int numCommand = Integer.parseInt(line); + if (checkCommand(numCommand)){ + menu.execute(numCommand); + } + } + } + + private boolean checkTextForInt(String text) { + if (text.matches("[0-9]+")) { + return true; + } else { + inputError(); + return false; + } + } + + private boolean checkCommand(int numCommand) { + if (numCommand <= menu.getSize()) { + return true; + } else { + inputError(); + return false; + } + } + + private void printMenu() { + + System.out.println(menu.menu()); +// N = 0; +// System.out.printf("%d. Добавить члена семьи \n", ++N); +// System.out.printf("%d. Вывести информацию о семейном дереве\n", ++N); +// System.out.printf("%d. Сортировать членов семейного дерева по имени\n", ++N); +// System.out.printf("%d. Сортировать членов семейного дерева по возрасту\n", ++N); +// System.out.printf("%d. Сохранить в файл]\n", ++N); +// System.out.printf("%d. Загрузить из файла\n", ++N); +// System.out.printf("%d. Закончить работу\n", ++N); + } + + private void inputError() { + System.out.println(INPUT_ERROR); + } + + @Override + public void addFamilyTreeMember(String name, String sGender) { + presenter.addFamilyTreeMember(name, sGender); + } + + @Override + public void getFamilyTreeInfo() { + presenter.getFamilyTreeInfo(); + + } + + @Override + public void sortByName() { + presenter.sortByName(); + + } + + @Override + public void sortByAge() { + presenter.sortByAge(); + } + + @Override + public void saveToFile () { + presenter.saveToFile(); + } + + @Override + public void loadFromFile() { + presenter.loadFromFile(); + } + + +} diff --git a/src/ru/gb/family_tree/view/MainMenu.java b/src/ru/gb/family_tree/view/MainMenu.java new file mode 100644 index 0000000..0e4ff0a --- /dev/null +++ b/src/ru/gb/family_tree/view/MainMenu.java @@ -0,0 +1,89 @@ +package ru.gb.family_tree.view; + +import ru.gb.family_tree.view.commands.*; + +import java.util.ArrayList; +import java.util.List; + +/* +Выполняется принцип "L" В конструкторе приходит параметр типа View, который более общий, чем класс ConsoleUI. + */ +public class MainMenu { + private View UI; + private List commandList; + + public MainMenu(View consoleUI) { + commandList = new ArrayList<>(); + commandList.add(new AddPerson(consoleUI)); + commandList.add(new GetInfo(consoleUI)); + commandList.add(new SortByName(consoleUI)); + commandList.add(new SortByAge(consoleUI)); + commandList.add(new Finish(consoleUI)); + } + + public String menu() { + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < commandList.size(); i++) { + stringBuilder.append(i + 1); + stringBuilder.append(". "); + stringBuilder.append(commandList.get(i).getDescription()); + stringBuilder.append("\n"); + } + return stringBuilder.toString(); + } + public void execute(int choice){ + Command command = commandList.get(choice-1); + command.execute(); + } + public int getSize(){ + return commandList.size(); + } + +// public void start(int choice) { +// +// switch (choice) { +// case 1: +// UI.print("Введите имя"); +// String name = UI.read(); +// UI.print("Введите пол. Если женский то Ж, если мужской то Ж"); +// String sGender = UI.read(); +// Gender gender; +// if (sGender.equals("M")) +// gender = Gender.MALE; +// else +// gender = Gender.FEMALE; +// Person person = new Person(name, gender); +// UI.addFamilyTreeMember(person); +// UI.printf("Член семейного дерева %s добавлен\n", name); +// break; +// case 2: +// UI.print("Семейное дерево:"); +// UI.getFamilyTreeInfo(); +// break; +// case 3: +// UI.sortByName(); +// UI.print("Успешно отсортировано по имени"); +// +// break; +// case 4: +// UI.sortByAge(); +// UI.print("Успешно отсортировано по возрасту"); +// break; +// case 5: +// UI.save(SavingType.FILE); +// UI.print("Сохранить в файл"); +// break; +// case 6: +// UI.load(SavingType.FILE); +// UI.print("Загрузить из файла"); +// break; +// case 7: +// UI.finish(); +// break; +// default: +// UI.print("ошибка"); +// +// } +// +// } +} diff --git a/src/ru/gb/family_tree/view/View.java b/src/ru/gb/family_tree/view/View.java new file mode 100644 index 0000000..22fe930 --- /dev/null +++ b/src/ru/gb/family_tree/view/View.java @@ -0,0 +1,26 @@ +package ru.gb.family_tree.view; + +public interface View { + void print(String text); + + void start(); + + String read(); + + void printf(String text, String placeHolder); + + void finish(); + + void addFamilyTreeMember(String name, String sGender); + + + void getFamilyTreeInfo(); + + void sortByName(); + + void sortByAge(); + + void saveToFile(); + void loadFromFile(); +} + diff --git a/src/ru/gb/family_tree/view/commands/AddPerson.java b/src/ru/gb/family_tree/view/commands/AddPerson.java new file mode 100644 index 0000000..d38e635 --- /dev/null +++ b/src/ru/gb/family_tree/view/commands/AddPerson.java @@ -0,0 +1,23 @@ +package ru.gb.family_tree.view.commands; + +import ru.gb.family_tree.view.View; + +public class AddPerson extends Command { + + public AddPerson(View consoleUI) { + super(consoleUI); + description = "Добавить члена фамильного дерева"; + + } + + @Override + public void execute() { + consoleUI.print("Введите имя"); + String name = consoleUI.read(); + consoleUI.print("Введите пол. Если женский то Ж, если мужской то Ж"); + String sGender = consoleUI.read(); + consoleUI.addFamilyTreeMember(name, sGender); + consoleUI.printf("Член семейного дерева %s добавлен\n", name); + } + +} diff --git a/src/ru/gb/family_tree/view/commands/Command.java b/src/ru/gb/family_tree/view/commands/Command.java new file mode 100644 index 0000000..d5bb4df --- /dev/null +++ b/src/ru/gb/family_tree/view/commands/Command.java @@ -0,0 +1,18 @@ +package ru.gb.family_tree.view.commands; + +import ru.gb.family_tree.view.View; + +public abstract class Command { + String description; + View consoleUI; + + public Command(View consoleUI) { + this.consoleUI = consoleUI; + } + + public String getDescription() { + return description; + } + + public abstract void execute(); +} \ No newline at end of file diff --git a/src/ru/gb/family_tree/view/commands/Finish.java b/src/ru/gb/family_tree/view/commands/Finish.java new file mode 100644 index 0000000..a230207 --- /dev/null +++ b/src/ru/gb/family_tree/view/commands/Finish.java @@ -0,0 +1,15 @@ +package ru.gb.family_tree.view.commands; + +import ru.gb.family_tree.view.View; + +public class Finish extends Command { + public Finish(View consoleUI) { + super(consoleUI); + description = "Закончить работу"; + } + + @Override + public void execute() { + consoleUI.finish(); + } +} diff --git a/src/ru/gb/family_tree/view/commands/GetInfo.java b/src/ru/gb/family_tree/view/commands/GetInfo.java new file mode 100644 index 0000000..a99813e --- /dev/null +++ b/src/ru/gb/family_tree/view/commands/GetInfo.java @@ -0,0 +1,16 @@ +package ru.gb.family_tree.view.commands; + +import ru.gb.family_tree.view.View; + +public class GetInfo extends Command { + public GetInfo(View consoleUI) { + super(consoleUI); + description = "Получить информацию о семейном дереве"; + } + + @Override + public void execute() { + + consoleUI.getFamilyTreeInfo(); + } +} diff --git a/src/ru/gb/family_tree/view/commands/LoadFromFile.java b/src/ru/gb/family_tree/view/commands/LoadFromFile.java new file mode 100644 index 0000000..54f0963 --- /dev/null +++ b/src/ru/gb/family_tree/view/commands/LoadFromFile.java @@ -0,0 +1,15 @@ +package ru.gb.family_tree.view.commands; + +import ru.gb.family_tree.view.View; + +public class LoadFromFile extends Command { + public LoadFromFile(View consoleUI) { + super(consoleUI); + description = "Загрузить из файла"; + } + + @Override + public void execute() { + consoleUI.loadFromFile(); + } +} diff --git a/src/ru/gb/family_tree/view/commands/SaveToFile.java b/src/ru/gb/family_tree/view/commands/SaveToFile.java new file mode 100644 index 0000000..2607c59 --- /dev/null +++ b/src/ru/gb/family_tree/view/commands/SaveToFile.java @@ -0,0 +1,15 @@ +package ru.gb.family_tree.view.commands; + +import ru.gb.family_tree.view.View; + +public class SaveToFile extends Command { + public SaveToFile(View consoleUI) { + super(consoleUI); + description = "Сохранить в файл"; + } + + @Override + public void execute() { + consoleUI.saveToFile(); + } +} diff --git a/src/ru/gb/family_tree/view/commands/SortByAge.java b/src/ru/gb/family_tree/view/commands/SortByAge.java new file mode 100644 index 0000000..462c72a --- /dev/null +++ b/src/ru/gb/family_tree/view/commands/SortByAge.java @@ -0,0 +1,15 @@ +package ru.gb.family_tree.view.commands; + +import ru.gb.family_tree.view.View; + +public class SortByAge extends Command { + public SortByAge(View consoleUI) { + super(consoleUI); + description = "Сортировка по возрасту"; + } + + @Override + public void execute() { + consoleUI.sortByAge(); + } +} diff --git a/src/ru/gb/family_tree/view/commands/SortByName.java b/src/ru/gb/family_tree/view/commands/SortByName.java new file mode 100644 index 0000000..d8e48bf --- /dev/null +++ b/src/ru/gb/family_tree/view/commands/SortByName.java @@ -0,0 +1,15 @@ +package ru.gb.family_tree.view.commands; + +import ru.gb.family_tree.view.View; + +public class SortByName extends Command{ + public SortByName(View consoleUI) { + super(consoleUI); + description = "Сортировка по имени"; + } + + @Override + public void execute() { + consoleUI.sortByName(); + } +}