提交 5d790266 编写于 作者: A ali4j

adds proxy design pattern.

上级 6c8151f6
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.");
}
}
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);
}
}
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;
}
}
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);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册