저는 자바를 처음 사용하고 디자인 패턴을 배우는 사람입니다. 나는 간단한 유스 케이스를 구현했다. 다른 형식으로 메일을 나타내고 싶은 메일 서비스. 1) 일반 2) XML 3) HTMl. 다음 코드를 작성했습니다.이것은 전략 패턴입니까
서비스 -
public interface GmailService {
public void sendMessage();
}
서비스 구현 -
public class GmailServiceImpl implements GmailService {
private Message message;
public GmailServiceImpl(Message message){
this.message = message;
}
@Override
public void sendMessage(){
System.out.println(this.message);
}
}
메시지 인터페이스 ---
public interface Message {
public String getBody();
public String getSubject();
public String getTo();
}
EMessage - T 그는 EMessage calss 정적 작성기 패턴을 가진 생성자가, 나는 그것을 게시하지 않습니다.
public class EMessage implements Message {
protected String to;
protected String body;
protected String subject;
@Override
public String getBody(){
return this.body;
}
@Override
public String getSubject() {
return this.subject;
}
@Override
public String getTo() {
return this.to;
}
protected Field[] getClassFields(){
return this.getClass().getDeclaredFields();
}
@Override
public String toString(){
StringBuilder sb = new StringBuilder();
Field[] fileds = this.getClass().getDeclaredFields();
for(Field field:fileds){
try {
sb.append(field.getName()).append(":-").append(field.get(this)).append(" ");
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return sb.toString();
}
메시지 전략 - 은 toString() 메서드는 다음과 같습니다 만의 toString 구현이 다른, 그리고 -
은public abstract class MessageStrategy extends EMessage{
protected Message message;
public MessageStrategy(Message message){
this.message = message;
}
}
XMLMessage은 ... MessageStrategy가 메시지 인터페이스를 EMessage 연장되지 않고 있습니다 내 인터페이스에는 없습니다.
public class XMLMessage extends MessageStrategy {
public XMLMessage(Message message) {
super(message);
}
@Override
public String toString(){
StringBuilder sb = new StringBuilder();
Field[] fields = this.message.getClass().getDeclaredFields();
sb.append("<class>");
for(Field field:fields){
try {
sb.append("<filed><name>").append(field.getName()).append("</name><value>").append(field.get(this.message)).append("</value><field>");
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
sb.append("</class>");
return sb.toString();
}
}
마찬가지로 HTML 구현이 있습니다. 클라이언트 코드는 -
@Test
public void testXmlMessageStrategy(){
Message m = new EMessage.EMessageBuilder().subject("Hi There").to("[email protected]").body("How r u buddy").build();
MessageStrategy xMessage = new XMLMessage(m);
GmailService service = new GmailServiceImpl(xMessage);
service.sendMessage();
System.out.println();
MessageStrategy htmlMessage = new HTMLMessage(m);
service = new GmailServiceImpl(htmlMessage);
service.sendMessage();
}
지금 내가 알고 싶은
난 전략 패턴으로 호출 할 수 있습니다?
Java 코드 대신 UML 다이어그램을 표시하는 것이 좋습니다. –