В настоящее время я пытаюсь понять цепочку ответственности, но в ней есть какой-то фрагмент кода, который я вообще не могу понять.Начнем с самого начала.
Для начала мне нужно создать 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 *).Так хорошо ли я понимаю логику, стоящую за этим?