Цепочка ответственности в Java - PullRequest
1 голос
/ 24 сентября 2019

В настоящее время я пытаюсь понять цепочку ответственности, но в ней есть какой-то фрагмент кода, который я вообще не могу понять.Начнем с самого начала.

Для начала мне нужно создать interface:

public interface ChainLink {
    void setNextChain(ChainLink link);
    void process(Model model);
}

Следующим шагом будет создание класса pojo:

public class Model {

    private int number;

    public Model(int number) {
        this.number = number;
    }

    public int getNumber() {
        return number;
    }
}

СейчасЯ должен создать три отдельных класса для каждого процесса:

Первый для отрицательного числа

public class NegativeNumber implements ChainLink {

     ChainLink link;
     @Override
     public void setNextChain(ChainLink link) {
         this.link = link;
     }
     @Override
     public void process(Model model) {
         if (model.getNumber() < 0){
             System.out.println("Given number is "+model.getNumber()+" and it's negative");
         }else {
             link.process(model);
         }
    }
}

Второй для number равен 0

public class ZeroNumber implements ChainLink {
     ChainLink link;
     @Override
     public void setNextChain(ChainLink link) {
         this.link = link;
     }

     @Override
     public void process(Model model) {
         if (model.getNumber() == 0){
             System.out.println("Given number is equal to 0");

         }else {
             link.process(model);
         }
     }
}

И третий, для возможных чисел

public class PositiveNumber implements ChainLink{
     private ChainLink link;
     @Override
     public void setNextChain(ChainLink link) {
         this.link = link;
     }

     @Override
     public void process(Model model) {
         if (model.getNumber() > 0){
             System.out.println("Given number is "+model.getNumber()+" and it's positive");

         }else {
             link.process(model);
         }
     }
}

Теперь я должен объединить его в класс Main.

import java.util.Scanner;

public class Main {

     public static void main(String[] args) {

         ChainLink negativeLink = new NegativeNumber();
         ChainLink zeroLink = new ZeroNumber();
         ChainLink positiveLink = new PositiveNumber();

         negativeLink.setNextChain(zeroLink);
         zeroLink.setNextChain(positiveLink);

         Scanner scanner = new Scanner(System.in);

         while (true){
             int number;
             System.out.println("Enter the number");
             number = scanner.nextInt();
             negativeLink.process(new Model(number));
         }
     }
}

Эта фиктивная программа, которую я предоставил, имеетпроверить, является ли число, указанное пользователем: отрицательным, равным 0 или положительным.Я не уверен, если я понимаю метод setNextChain (который есть в каждом классе процесса)

@Override
 public void setNextChain(ChainLink link) {
     this.link = link;
 }

, который реализован в главном классе

     ChainLink negativeLink = new NegativeNumber();
     ChainLink zeroLink = new ZeroNumber();
     ChainLink positiveLink = new PositiveNumber();

     negativeLink.setNextChain(zeroLink);
     zeroLink.setNextChain(positiveLink);

Итак, я хотел бы знать,если я правильно понял.По сути, этот метод объединит в цепочку другой класс процесса, когда первый (в данном случае NegativeNumber ) не может многое сделать здесь, потому что, скажем, пользователь введет число, равное 3. Так что программа будетубедитесь, что если введенное число <0, в противном случае оно будет проверено другим классом процесса (<strong> ZeroNumber ), если число не равно 0, тогда другая цепочка проверит его ( PositiveNumber *)1037 *).Так хорошо ли я понимаю логику, стоящую за этим?

...