Compare commits

...

2 Commits

Author SHA1 Message Date
42c63045b0 added lab9 ex1 2024-11-04 09:16:59 +01:00
d46443f6d5 added chain of responsibility example 2024-11-04 09:01:38 +01:00
15 changed files with 224 additions and 6 deletions

View File

@@ -3,13 +3,13 @@ package lab7_state.ex2;
import lab7_state.ex2.states.*;
public class User {
private String name;
private final String name;
private UserState currentState;
private UserState unregisteredState;
private UserState registeredState;
private UserState inMeetingState;
private UserState waitingToSpeakState;
private UserState speakingState;
private final UserState unregisteredState;
private final UserState registeredState;
private final UserState inMeetingState;
private final UserState waitingToSpeakState;
private final UserState speakingState;
public User(String name) {
this.name = name;

View File

@@ -0,0 +1,9 @@
package lab9_responsibility_chain.ex1;
public record Email(String subject, EmailType type) {
@Override
public String toString() {
return "<" + type + " Email: '" + subject + "'>";
}
}

View File

@@ -0,0 +1,8 @@
package lab9_responsibility_chain.ex1;
public enum EmailType {
SPAM,
FAN,
COMPLAINT,
NEW_LOC
}

View File

@@ -0,0 +1,11 @@
package lab9_responsibility_chain.ex1;
public abstract class Handler {
protected Handler successor;
public void setSuccessor(Handler successor) {
this.successor = successor;
}
public abstract void handleEmail(Email email);
}

View File

@@ -0,0 +1,26 @@
package lab9_responsibility_chain.ex1;
import lab9_responsibility_chain.ex1.handlers.*;
public class Main {
public static void main(String[] args) {
Handler spamHandler = new SpamHandler();
Handler fanHandler = new FanHandler();
Handler complaintHandler = new ComplaintHandler();
Handler newLocHandler = new NewLocHandler();
spamHandler.setSuccessor(fanHandler);
fanHandler.setSuccessor(complaintHandler);
complaintHandler.setSuccessor(newLocHandler);
Email email1 = new Email("You WON the LoTtErY !!!!!", EmailType.SPAM);
Email email2 = new Email("Your company is awesome !", EmailType.FAN);
Email email3 = new Email("My children are addicted :(", EmailType.COMPLAINT);
Email email4 = new Email("Please come to Sion :)", EmailType.NEW_LOC);
spamHandler.handleEmail(email1);
spamHandler.handleEmail(email2);
spamHandler.handleEmail(email3);
spamHandler.handleEmail(email4);
}
}

View File

@@ -0,0 +1,16 @@
package lab9_responsibility_chain.ex1.handlers;
import lab9_responsibility_chain.ex1.Email;
import lab9_responsibility_chain.ex1.EmailType;
import lab9_responsibility_chain.ex1.Handler;
public class ComplaintHandler extends Handler {
@Override
public void handleEmail(Email email) {
if (email.type() == EmailType.COMPLAINT) {
System.out.println("Forwarding complaint to legal department (" + email + ")");
} else if (successor != null) {
successor.handleEmail(email);
}
}
}

View File

@@ -0,0 +1,16 @@
package lab9_responsibility_chain.ex1.handlers;
import lab9_responsibility_chain.ex1.Email;
import lab9_responsibility_chain.ex1.EmailType;
import lab9_responsibility_chain.ex1.Handler;
public class FanHandler extends Handler {
@Override
public void handleEmail(Email email) {
if (email.type() == EmailType.FAN) {
System.out.println("Forwarding fan email to CEO (" + email + ")");
} else if (successor != null) {
successor.handleEmail(email);
}
}
}

View File

@@ -0,0 +1,16 @@
package lab9_responsibility_chain.ex1.handlers;
import lab9_responsibility_chain.ex1.Email;
import lab9_responsibility_chain.ex1.EmailType;
import lab9_responsibility_chain.ex1.Handler;
public class NewLocHandler extends Handler {
@Override
public void handleEmail(Email email) {
if (email.type() == EmailType.NEW_LOC) {
System.out.println("Forwarding request to business development (" + email + ")");
} else if (successor != null) {
successor.handleEmail(email);
}
}
}

View File

@@ -0,0 +1,16 @@
package lab9_responsibility_chain.ex1.handlers;
import lab9_responsibility_chain.ex1.Email;
import lab9_responsibility_chain.ex1.EmailType;
import lab9_responsibility_chain.ex1.Handler;
public class SpamHandler extends Handler {
@Override
public void handleEmail(Email email) {
if (email.type() == EmailType.SPAM) {
System.out.println("Deleting spam email (" + email + ")");
} else if (successor != null) {
successor.handleEmail(email);
}
}
}

View File

@@ -0,0 +1,19 @@
package learn.simple_responsibility_chain;
import java.util.Arrays;
import java.util.List;
public class ConcreteHandler1 extends Handler {
private final List<String> myAnimals = Arrays.asList("cat", "dog", "horse");
@Override
public void handleRequest(Request request) {
if (myAnimals.contains(request.getValue())) {
System.out.println("Request for " + request.getValue() + " handled by " + this);
} else {
if (successor != null) {
successor.handleRequest(request);
}
}
}
}

View File

@@ -0,0 +1,19 @@
package learn.simple_responsibility_chain;
import java.util.Arrays;
import java.util.List;
public class ConcreteHandler2 extends Handler {
private final List<String> myColors = Arrays.asList("red", "yellow", "blue");
@Override
public void handleRequest(Request request) {
if (myColors.contains(request.getValue())) {
System.out.println("Request for " + request.getValue() + " handled by " + this);
} else {
if (successor != null) {
successor.handleRequest(request);
}
}
}
}

View File

@@ -0,0 +1,17 @@
package learn.simple_responsibility_chain;
import java.util.Arrays;
import java.util.List;
public class ConcreteHandler3 extends Handler {
private final List<String> myNumbers = Arrays.asList("1", "2", "3");
@Override
public void handleRequest(Request request) {
if (myNumbers.contains(request.getValue())) {
System.out.println("Request for " + request.getValue() + " handled by " + this);
} else {
throw new RuntimeException("Request could not be handled");
}
}
}

View File

@@ -0,0 +1,11 @@
package learn.simple_responsibility_chain;
public abstract class Handler {
protected Handler successor;
public void setSuccessor(Handler successor) {
this.successor = successor;
}
public abstract void handleRequest(Request request);
}

View File

@@ -0,0 +1,21 @@
package learn.simple_responsibility_chain;
public class Main {
public static void main(String[] args) {
Handler firstHandler = new ConcreteHandler1();
Handler secondHandler = new ConcreteHandler2();
Handler thirdHandler = new ConcreteHandler3();
firstHandler.setSuccessor(secondHandler);
secondHandler.setSuccessor(thirdHandler);
Request request1 = new Request("dog");
firstHandler.handleRequest(request1);
Request request2 = new Request("3");
firstHandler.handleRequest(request2);
Request request3 = new Request("house");
firstHandler.handleRequest(request3);
}
}

View File

@@ -0,0 +1,13 @@
package learn.simple_responsibility_chain;
public class Request {
private String value;
public Request(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}