국비지원
[JAVA] 클래스와 결과를 이어주는 중간자 예제
yeon-96
2023. 1. 13. 23:57
반응형
내가 생각한 중간자란..
객체를 인터페이스형으로 생성하여, 유연성을 높게 해주고 객체가 직접 결과를 도출할 수 있도록 해주어야한다.
조별 과제 때 문제점이 swing 컴포넌트들을 파라미터로 받고 있었는데, 그렇게 되면.. GUI가 없다면 쓸 수 없는 코드가 되어버리는 것이다.
그래서 중간자가 필요한 것이고, 파라미터로 컴포넌트가 아닌 정확한 값만 받도록 하여 값을 주고 받도록 해야한다.
이말은 즉 getter, setter의 활용을 극대화 해야한다고 생각한다.
적용해보지않아 감이 잡히진 않지만 예제를 공부해보았다.
중간자의 예제
package test;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Map;
interface 명령처리자 {
결과 처리();
}
class 첫번째명령처리자 implements 명령처리자 {
@Override
public 결과 처리() {
return new 결과("첫번째결과");
}
}
class 두번째명령처리자 implements 명령처리자 {
@Override
public 결과 처리() {
return new 결과("두번째결과");
}
}
class 결과 {
private String message;
public 결과(String message) {
super();
this.message = message;
}
public String getMessage() {
return message;
}
}
public class Main implements ActionListener {
private Map<String, 명령처리자> 처리자맵;
public Main() {
super();
처리자맵 = new HashMap<>();
처리자맵.put("명령어1번", new 첫번째명령처리자());
처리자맵.put("명령어2번", new 두번째명령처리자());
}
public void 사용자명령처리하기(String 명령어) {
// 처리자찾기
명령처리자 inst = 처리자맵.get(명령어);
// 처리자보고 명령하기
결과 result = inst.처리();
// 결과 사용하기
System.out.println(result.getMessage());
}
@Override
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
사용자명령처리하기(command);
}
public static void main(String[] args) {
Main main = new Main();
main.사용자명령처리하기("명령어1번");
main.사용자명령처리하기("명령어2번");
}
}
1. 인터페이스에 결과를 처리할 메소드를 정의한다. (명령처리자)
2. 메소드를 재정의 해주는 구현체를 만든다.(첫번째명령처리자, 두번째명령처리자, 세번째명령처리자)
3. 처리자를 담을 MAP을 생성하고 명령처리자구현체를 인터페이스형으로 MAP에 put해준다.
4. MAP의 get메소드로 명령어를 실행해본다.
5. 객체가 명령어에 맞는 문장을 출력한다.
다음 기회엔 MAP을 활용해 볼 수 있도록.
반응형