Skip to content

Latest commit

Β 

History

History
37 lines (30 loc) Β· 2.1 KB

File metadata and controls

37 lines (30 loc) Β· 2.1 KB

Command Pattern

command

  • μš”μ²­μ„ 객체의 ν˜•νƒœλ‘œ μΊ‘μŠν™”ν•˜μ—¬ μ‚¬μš©μžκ°€ 보낸 μš”μ²­μ„ λ‚˜μ€‘μ— μ΄μš©ν•  수 μžˆλ„λ‘ μš”μ²­μ— ν•„μš”ν•œ 정보(ν•¨μˆ˜λͺ…, λ§€κ°œλ³€μˆ˜ λ“±)λ₯Ό μ €μž₯, λ‘œκΉ…, μ·¨μ†Œν•  수 있게 ν•˜λŠ” νŒ¨ν„΄μ΄λ‹€.

κ΄€λ ¨ μš©μ–΄

Command

  • 싀행될 κΈ°λŠ₯에 λŒ€ν•œ μΈν„°νŽ˜μ΄μŠ€
  • 싀행될 κΈ°λŠ₯을 Execute ν•¨μˆ˜λ‘œ μ„ μ–Έν•œλ‹€.
  • Receiver 객체λ₯Ό κ°€μ§€κ³  있으며 Receiver 객체의 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œλ‹€.
  • μ»€λ§¨λ“œ κ°μ²΄λŠ” λ³„λ„λ‘œ Invoker 객체에 μ „λ‹¬λ˜μ–΄ λͺ…령을 λ°œλ™ν•˜κ²Œ ν•œλ‹€.

ConcreteCommand

  • μ‹€μ œλ‘œ μ‹€ν–‰λ˜λŠ” κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λŠ” 클래슀
  • Commandλ₯Ό 상속받아 κ΅¬ν˜„ν•œλ‹€.

Invoker

  • κΈ°λŠ₯의 싀행을 μš”μ²­ν•˜λŠ” 호좜자 클래슀
  • ν•„μš”μ— 따라 λͺ…λ Ή λ°œλ™μ— λŒ€ν•œ 기둝을 남길 수 μžˆλ‹€.
  • ν•˜λ‚˜μ˜ Invoker 객체에 λ‹€μˆ˜μ˜ Command 객체가 전달될 수 μžˆλ‹€.

Receiver

  • ConcreteCommand의 κΈ°λŠ₯을 μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” μˆ˜μ‹ μž ν΄λž˜μŠ€μ΄λ‹€.
  • Commandλ‘œλΆ€ν„° ν˜ΈμΆœμ„ λ°›μ•„ μžμ‹ μ—κ²Œ μ •μ˜λœ ν•¨μˆ˜λ₯Ό μˆ˜ν–‰ν•œλ‹€.

Client

  • Client κ°μ²΄λŠ” Invoker 객체와 ν•˜λ‚˜ μ΄μƒμ˜ Command 객체λ₯Ό λ³΄μœ ν•œλ‹€.
  • μ–΄λŠ μ‹œμ μ—μ„œ μ–΄λ–€ λͺ…령을 μˆ˜ν–‰ν• μ§€λ₯Ό κ²°μ •ν•œλ‹€.
  • λͺ…령을 μˆ˜ν–‰ν•˜λ €λ©΄ Client κ°μ²΄λŠ” Invoker 객체둜 Command 객체λ₯Ό μ „λ‹¬ν•œλ‹€.

νŠΉμ§•

  • 싀행될 κΈ°λŠ₯을 μΊ‘μŠν™”ν•¨μœΌλ‘œμ¨ μ£Όμ–΄μ§„ μ—¬λŸ¬ κΈ°λŠ₯을 μ‹€ν–‰ν•  수 μžˆλŠ” μž¬μ‚¬μš©μ„±μ΄ 높은 클래슀λ₯Ό μ„€κ³„ν•œλ‹€.
  • μ΄λ²€νŠΈκ°€ λ°œμƒν–ˆμ„ λ•Œ 싀행될 κΈ°λŠ₯이 λ‹€μ–‘ν•˜λ©΄μ„œλ„ 변경이 ν•„μš”ν•œ 경우 이벀트λ₯Ό λ°œμƒμ‹œν‚€λŠ” 클래슀λ₯Ό λ³€κ²½ν•˜μ§€ μ•Šκ³  μž¬μ‚¬μš©ν•˜κ³ μž ν•  λ•Œ μœ μš©ν•˜λ‹€.
  • 싀행될 κΈ°λŠ₯을 μΊ‘μŠν™”ν•¨μœΌλ‘œμ¨ κΈ°λŠ₯의 싀행을 μš”κ΅¬ν•˜λŠ” Invoker ν΄λž˜μŠ€μ™€ μ‹€μ œ κΈ°λŠ₯을 μ‹€ν–‰ν•˜λŠ” μˆ˜μ‹ μž 클래슀 μ‚¬μ΄μ˜ μ˜μ‘΄μ„±μ„ μ œκ±°ν•œλ‹€.
  • 싀행될 κΈ°λŠ₯의 변경에도 Invoker 클래슀λ₯Ό μˆ˜μ • 없이 κ·ΈλŒ€λ‘œ μ‚¬μš© ν•  수 μžˆλ„λ‘ ν•΄μ€€λ‹€.

예제