adds proxy design pattern.
This commit is contained in:
parent
6c8151f64e
commit
5d790266e7
@ -0,0 +1,11 @@
|
||||
package com.designpatterns.structural.proxy;
|
||||
|
||||
import com.designpatterns.structural.proxy.president.PresidentSecretary;
|
||||
|
||||
public class Citizen {
|
||||
|
||||
public static void main(String[] args) {
|
||||
PresidentSecretary presidentSecretary = new PresidentSecretary();
|
||||
presidentSecretary.leaveValidMessageForPresident("Hello president.");
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package com.designpatterns.structural.proxy.president;
|
||||
|
||||
import com.designpatterns.creational.singleton.Singleton;
|
||||
|
||||
public class President {
|
||||
|
||||
private volatile static President instance = null;
|
||||
|
||||
private President() {}
|
||||
|
||||
static President getInstance() {
|
||||
if (instance == null) {
|
||||
synchronized (Singleton.class) {
|
||||
if (instance == null) {
|
||||
instance = new President();
|
||||
}
|
||||
}
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void talkToThePresident(String message){
|
||||
System.out.println("I, the President, have received this message:" + message);
|
||||
}
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
package com.designpatterns.structural.proxy.president;
|
||||
|
||||
public class PresidentSecretary {
|
||||
|
||||
private President president;
|
||||
|
||||
public PresidentSecretary() {
|
||||
this.president = President.getInstance();
|
||||
}
|
||||
|
||||
public void leaveValidMessageForPresident(String message){
|
||||
|
||||
if(!isMessageValid(message))
|
||||
throw new RuntimeException("invalid message");
|
||||
|
||||
System.out.println("message is being sent to the President...");
|
||||
president.talkToThePresident(message);
|
||||
System.out.println("message is received by the President.");
|
||||
|
||||
}
|
||||
|
||||
private boolean isMessageValid(String message) {
|
||||
return message != null && !message.isEmpty() && message.length() >= 10 && message.length() <= 100;
|
||||
}
|
||||
}
|
@ -0,0 +1,39 @@
|
||||
package com.designpatterns.structural.proxy;
|
||||
|
||||
import com.designpatterns.structural.proxy.president.PresidentSecretary;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class Citizen {
|
||||
|
||||
|
||||
private PresidentSecretary presidentSecretary = new PresidentSecretary();
|
||||
|
||||
@Test
|
||||
public void talkToPresident_secretaryShouldRejectTooShortMessage() {
|
||||
String message = "Hi there.";
|
||||
|
||||
Assertions.assertThrows(RuntimeException.class, () -> {
|
||||
presidentSecretary.leaveValidMessageForPresident(message);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void talkToPresident_secretaryShouldRejectTooLongMessage() {
|
||||
String message = "Hi there. this is a message about some personal issue which I have decided to share with Mr.President.";
|
||||
|
||||
Assertions.assertThrows(RuntimeException.class, () -> {
|
||||
presidentSecretary.leaveValidMessageForPresident(message);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void talkToPresident_secretaryShouldAcceptTheMessage() {
|
||||
String message = "Hello Mr.President";
|
||||
|
||||
presidentSecretary.leaveValidMessageForPresident(message);
|
||||
Assertions.assertTrue(true);
|
||||
}
|
||||
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user