커맨드패턴(디자인패턴)
커맨드 패턴은 객체의 행위(메소드)를 클래스로 만들어 캡슐화 하는 패턴이다.
즉, 어떤 객체(A)에서 다른 객체(B)의 메서드를 실행하려면 그 객체(B)를 참조하고 있어야 하는 의존성이 발생한다.
그러나 커맨드 패턴을 적용하면 의존성을 제거할 수 있다.
또한 기능이 수정되거나 변경이 일어날 때 A 클래스 코드를 수정없이 기능에 대한 클래스를 정의하면 되므로 시스템이 확장성이 있으면서 유연해진다.
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Map;
interface 명령처리자 {
public 결과 처리();
}
class 첫번째명령처리자 implements 명령처리자 {
@Override
public 결과 처리() {
return new 결과("첫번째결과");
}
}
class 두번째명령처리자 implements 명령처리자 {
@Override
public 결과 처리() {
return new 결과("두번째결과");
}
}
class 결과 {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public 결과(String message) {
super();
this.message = 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) {
}
}
DB에서 이미지 가져오기
이미지는 용량이 크고, DB접속이 느리기 때문에 DB접속을 최소화시키고 이미지 객체를 생성시키는것을 최소화하기 위해서 DB에서 이미지를 가져와 Map에 저장하여 사용한다.
public class Assets {
private Map<String, Image> imageMap; // 이미지 또는 바이트배열
private 이미지저장소 repo;
public Assets(Map<String, Image> imageMap) {
this.imageMap = imageMap;
repo = new 이미지저장소();
}
private void initMap() {
List 목록 = 로컬저장된파일목록가져오기();
for (이미지한개 하나 : 목록) {
map.put("고유한키값", 하나);
}
}
public Image getImage(String imageName) {
if (imageMap.containKey(imageName)) {
return imageMap.get(imageName);
} else {
Image 불러온거 = repo.디비에저장된이미지가져오기(imageName);
imageMap.put("이번에새로가져온거키값", 불러온거);
return 불러온거;
}
}
}