- 메서드 호출을 캡슐화
- 요청을 하는 객체와 그 요청을 수행하는 객체를 분리할 수 있다.
예제
- Player라는 객체가 존재한다고 한다.
- Player는
Attack
,Run
,Jump
행위를 할 수 있다. - 위를 커맨드 패턴으로 구현 해 보자!
Player 클래스는 대략 이렇다.
public class Player
{
public void Attack()
{
Debug.Log("Attack");
}
public void Run()
{
Debug.Log("Run");
}
public void Jump()
{
Debug.Log("Jump");
}
}
ICommand로 공통된 interface를 가지도록 한다.
public interface ICommand
{
void Excute();
}
Attack, Run, Jump에 대응되는 Command를 구현한다.
public class AttackCommand : ICommand
{
private Player _player;
public AttackCommand(Player player)
{
_player = player;
}
public void Excute()
{
_player.Attack();
}
}
public class RunCommand : ICommand
{
private Player _player;
public RunCommand(Player player)
{
_player = player;
}
public void Excute()
{
_player.Run();
}
}
public class JumpCommand : ICommand
{
private Player _player;
public JumpCommand(Player player)
{
_player = player;
}
public void Excute()
{
_player.Jump();
}
}
테스트 하는 코드를 작성하자!
public class CommandTest : MonoBehaviour
{
private ICommand _attackCommand;
private ICommand _runCommand;
private ICommand _jumpCommand;
private Player _player;
void Start()
{
_player = new Player();
_attackCommand = new AttackCommand(_player);
_runCommand = new RunCommand(_player);
_jumpCommand = new JumpCommand(_player);
}
void Update()
{
if (Input.GetKeyDown(KeyCode.A))
{
_attackCommand.Excute();
}
if (Input.GetKeyDown(KeyCode.S))
{
_runCommand.Excute();
}
if (Input.GetKeyDown(KeyCode.D))
{
_jumpCommand.Excute();
}
}
}
반응형
'디자인 패턴 [Design Pattern]' 카테고리의 다른 글
디자인 패턴 공부 시작 (1) | 2021.06.10 |
---|---|
경량 패턴 (0) | 2021.06.09 |