본문 바로가기

OOP

헤드퍼스트 디자인패턴 - 커맨드패턴

 
요청 리시버 Light.java

package ch01.sec01;
// 리시버
public class Light {
	
	String location ="";
	
	public Light(){
		 this.location = location;
	}
	
	

	public void on() {
		System.out.println(location + " light is on");
	}

}

 
 
 
커맨더 인터페이스 

package ch01.sec01;

public interface Command {
	public void excute();
}

 
 
 
커맨더 인터페이스를 구현한 "LightOnCommand" 클래스가 가지고 있는  "execute()" 메서드 내에서  "Light" 객체의 메서드를 호출하고 있다. 이렇게 "execute()" 메서드 내에서 호출되는 light.on 객체가 해당 커맨드의 리시버이다. 따라서 "execute()" 메서드를 호출할 때 커맨드 객체는 자신이 가지고 있는 리시버를 사용하여 특정 작업을 수행한다.

package ch01.sec01;

public class LightOnCommand implements Command {
	
	Light light;
	
	public LightOnCommand(Light light) {
		this.light = light;
	}
	
	@Override
	public void excute() {
		light.on();
		
	}	
}

 
 
인보커객체는 커맨더안에 캡슐화한 요청 리시버를 실행하는 것이다. 예를들면 서빙알바는 주문만 받고 요리만드는 법을 알지 못해도 된다.

package ch01.sec01;

public class SimpleRemoteControl {
	Command slot;
	public void SimpleRemoteControl() {}
	
	public void setCommand(Command command) {
		slot = command;
	}
	public void buttonWasPressed() {
		slot.excute();
	}
}

 
 
SimpleRemote remote인보커 객체에 들어있는  setCommand메서드 에게 커맨드객체를 전달해주고 buttonWasPressed메서드 excute를 실행해준다.

package ch01.sec01;

public class RemoteControlTest {

	public static void main(String[] args) {
		SimpleRemoteControl remote = new SimpleRemoteControl();
		Light light = new Light();
		// 리시버 클래스인 light를 LightonCommand 커맨드객체에 전달한다. 
		LightOnCommand lightOn = new LightOnCommand(light);
		
		// 커맨드인터페이스를 구현한 LightOnCommand lightOn 클래스가 
		// light 클래스에 요청 메서드인 light.on을 캡슐화한것 
		remote.setCommand(lightOn);
		remote.buttonWasPressed();
		
	}

}

 
 
요청을 객체의 형태로 캡슐화하여 재이용하거나 취소할 수 있도록 한것 요청 리시버를 커맨드 인터페이스를 구현한 객체에 전달해 캡슐화를 한다.

  1. 리시버 (Receiver): 요청을 처리하는 실제 객체이다. 예를 들어, "Light" 클래스는 조명을 제어하는 리시버 역할을 한다.
  2. 커맨드 객체 (Command Object): 특정 작업을 캡슐화한 객체로, 요청을 수행하는 역할을 합니다. 이 객체는 실행할 메서드를 가지고 있으며, 실행 시에는 해당 메서드를 호출한다. 예를 들어, "LightOnCommand" 클래스는 조명을 켜는 작업을 캡슐화한 커맨드 객체다.
  3. 인보커 (Invoker): 커맨드 객체를 받아서 실행하고 관리하는 객체이다. 클라이언트와 커맨드 객체 사이의 중개자 역할을 한다. 클라이언트는 인보커에게 커맨드 객체를 전달하고, 인보커는 해당 커맨드 객체를 실행한다. 예를 들어, "SimpleRemoteControl" 클래스는 인보커 역할을 하며, 클라이언트로부터 받은 커맨드 객체를 실행한다.

 
 
https://www.yes24.com/Product/Goods/108192370

헤드 퍼스트 디자인 패턴 - 예스24

유지관리가 편리한 객체지향 소프트웨어 만들기!“『헤드 퍼스트 디자인 패턴(개정판)』 한 권이면 충분하다.이유 1. 흥미로운 이야기와 재치 넘치는 구성이 담긴 〈헤드 퍼스트〉 시리즈! 하나

www.yes24.com

 

'OOP' 카테고리의 다른 글

헤드퍼스트 디자인패턴 - Facade 패턴  (0) 2024.05.05
파이썬 객체생성 초기화__init__ , SELF 매개변수  (0) 2024.02.15
인터페이스 설계도  (0) 2024.02.01
다형성  (0) 2024.02.01
PHP 객체의 속성에 객체 저장  (0) 2024.01.30