adds proxy design pattern.

This commit is contained in:
ali4j 2019-11-03 18:05:40 +03:30
parent 6c8151f64e
commit 5d790266e7
4 changed files with 102 additions and 0 deletions

View File

@ -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.");
}
}

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -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);
}
}