interface 형식의 Command를 정의하고 각각 명령에 해당하는 요구사항을 구체 클래스로 구현 및 메서드 정의
장점은 새로운 명령(command) 추가시 Command interface를 override하는 class만 추가하면 되어 유지보수가 쉽다
어떤 행위 자체를 직접 처리하지 않고 캡슐화된 메소드를 사용하여 처리
ex.새 탭을 여는것과 같은 행위를 수행할 때 사용
예제 코드
interface Command {
fun executable(event): Boolean
fun execute(event): Result
companion object {
fun allCommandsOf() = listOf(
OnCommand()
OffCommand()
)
}
}
internal class OnCommand(): Command {
fun executable(event): Boolean = (event.type == "On")
fun execute(event): Result {
.... // 구현내용 생략
}
}
internal class OffCommand(): Command {
fun executable(event): Boolean = (event.type == "Off")
fun execute(event): Result {
.... // 구현내용 생략
}
}
class ClientImpl() {
val commands = Command.allCommandsOf() // 커멘드들의 리스트를 담는 것
fun executeCommand(event: String) {
// 커멘드 수행. executable에서 만족되는 것 수행
commands.find {it.executable(event)}?.execute(event)
}
}
Strategy 패턴
행위를 클래스로 캡슐화하여 동적으로 행위를 자유롭게 바꿀 수 있는 패턴
전략을 쉽게 바꿀 수 있는 것
어떤 행위를 처리할 때 로직(비즈니스)의 일부 전략을 캡슐화하여 이용
예제코드
interface Strategy {
fun execute(event): result
}
internal class OnStrategy(): Strategy {
fun execute(event): result {
// 구현 내용 생략
}
}
internal class OffStrategy(): Strategy {
fun execute(event): result {
// 구현 내용 생략
}
}
class EventHandling() {
private lateinit var strategy: Strategy
fun setStrategy(strategy: Strategy) {
this.strategy = strategy
}
fun logic() {
// 구현 내용 생략
....
strategy.execute(event)
...
}
}
class ClientImpl() {
private val eventHandler = EventHandling()
fun executor() {
eventHandler.setStrategy(new OnStrategy())
eventHandler.logic()
eventHandler.setStrategy(new OffStrategy())
eventHandler.logic()
}
}
Strategy 패턴은 EventHandling 함수에서 하나만 Strategy로 받도록 되었는데 경우에 따라선 Command 패턴 예제처럼 사용할 수도 있다(둘다 같은 Behavior 패턴에 속하니까..)
중요한 것은 목적이 어떤 것인지 파악하는 것이 중요해보인다
Design Pattern
Command 패턴
Command
를 정의하고 각각 명령에 해당하는 요구사항을 구체 클래스로 구현 및 메서드 정의Command
interface를 override하는 class만 추가하면 되어 유지보수가 쉽다예제 코드
Strategy 패턴
예제코드
Strategy 패턴은
EventHandling
함수에서 하나만 Strategy로 받도록 되었는데 경우에 따라선 Command 패턴 예제처럼 사용할 수도 있다(둘다 같은 Behavior 패턴에 속하니까..) 중요한 것은 목적이 어떤 것인지 파악하는 것이 중요해보인다출처 : https://kimchanjung.github.io/design-pattern/2020/05/28/strategy-pattern/ https://tecoble.techcourse.co.kr/post/2021-10-04-strategy-command-pattern/