* Command Pattern
Command : 하나의 명령(기능)을 객체화한 패턴
객체는 전달 및 보관할 수 있어 명령(기능)을 전달(메서드의 인자를 통해)하고 보관(메모리, DBMS에)할 수 있게 됨. 즉 데이터가 아닌 행위를 보관. 또 네트워크를 통해 전달해 또 다른 컴퓨터에 전달해 기능을 수행할 수 있음.
배치 실행, Undo/Redo, 우선순위가 높은 명령을 먼저 실행하기 등이 가능해짐.
(배치 실행 : 기능들을 한 번에 모아서 실행
Undo/Redo : 이미 실행한 기능을 되돌리거나 다시 실행)
Command 인터페이스와 이를 구현하는 5개의 클래스. 각 5개 클래스는 자신만의 고유한 기능을 가짐.
ClearCommand : 모두 지우기
PrintCommand : 원하는 문자열 출력
MoveCommand : 출력 위치 지정
ColorCommand : 출력 문자열 색상 지정
- 각 클래스는 오직 자신의 기능 수행에 초점을 맞춤.
CommandGroup : Command 객체를 여러 개 담아 배치 기능 구현에 이용될 수 있음.

Command Interface 기능을 수행하는 run() 매서드만 가지고 있다.
public interface Command {
public void run();
}
// Undo 가 필요하다면 여기에서 구현 필요
Command를 Implements 하는 4개의 Command.
public class ClearCommand implements Command {
@Override
public void run() {
System.out.print("\033[H\033[2J");
System.out.flush();
}
}
public class PrintCommand implements Command {
private String content;
public PrintCommand(String content) {
this.content = content;
}
@Override
public void run() {
System.out.println(content);
}
}
public class MoveCommand implements Command {
private int x;
private int y;
public MoveCommand(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public void run() {
System.out.print(String.format("%c[%d;%df", 0x1B, y, x));
}
}
public class ColorCommand implement Command {
public enum Color {
BLACK("\u001B[30m"), RED("\u001B[31m"),
GREEN("\u001B[32m"), YELLOW("\u001B[33m"),
BLUE("\u001B[34m"), PURPLE("\u001B[35m"),
CYAN("\u001B[36m"), WHITE("\u001B[37m");
final private String code;
private Color(String code) {
this.code = code;
}
public String getCode() {
return code;
}
};
private Color color;
Public ColorCommand(Color color) {
thus.color = color;
}
@Override
public void run() {
System.out.print(color.getcode());
}
}
CommandGroup 클래스 command객체를 저장 후 모아서 실행함.
public class CommandGroup implement Command {
private ArrayList<Command> commands = new ArrayList<>();
public void add(Command command) {
commands.add(command);
}
@Override
pubilc void run() {
for(Command command : commands) {
command.run();
}
}
}
지금까지 작성한 클래스로 최종 구현.
예시는 배치 실행으로 해서 CommandGroup에 각 Command를 저장 후 순차적으로 실행하게 됨.
public class MainEntry {
public static void main(String[] args) {
CommandGroup = cmdGroup = new CommanGroup();
Command clearCmd = new ClearCommand();
cmdGroup.add(clearCmd);
Command yellowColorCmd = new ColorCommand(ColorCommand.Color.YELLOW);
cmdGroup.add(yellowColorCmd);
cmdGroup.run();
}
}
'코딩 > Software Architecture' 카테고리의 다른 글
| [GoF Design Pattern] Facade (0) | 2022.12.04 |
|---|---|
| [GoF Design Pattern] Flyweight (0) | 2022.12.04 |
| [GoF Design Pattern] Prototype (0) | 2022.12.03 |
| [GoF Design Pattern] Proxy (0) | 2022.12.02 |
| [GoF Design Pattern] Factory Method, Observer (0) | 2022.12.01 |