Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- notification
- Behavior
- LiveData
- room
- 백준
- Navigation
- DataBinding
- 안드로이드
- 코틀린
- CoordinatorLayout
- CollapsingToolbarLayout
- Coroutine
- recyclerview
- HTTP
- lifecycle
- onMeasure
- 알림
- kotlin
- 알고리즘
- onLayout
- ViewModel
- Algorithm
- activity
- AppBarLayout
- Android
- sqlite
- hilt
- View
- BOJ
- CustomView
Archives
- Today
- Total
개발일지
Design Pattern in A..Z - Command 본문
Command
Command 패턴은 객체의 메소드를 클래스로 만들어 캡슐화 하여 사용하는 패턴입니다.
만약 A Class에서 B Class 기능을 실행하려면 B Class가 의존적으로 필요하지만 Command 패턴을 사용하면 의존성을 제거할 수 있습니다.
불을 키는 Handler를 구현한다고 합시다. 생성자로 불을 키는 클래스를 받고 함수를 실행하면 됩니다.
class NoCommandHandler(
private val on: LightOnCommand
) {
fun invoke() {
on.execute()
}
}
만약 해당 클래스에서 불을 끄는 클래스로 변경한다면 내부의 코드를 변환해야하고 하나의 핸들러로 불을 키고 끄는 기능을 추가한다면 구조를 바꿔야 합니다.
-> 기능과 핸들러가 의존적이고 기능을 바꾸면 핸들러의 코드가 바뀐다.
class NoCommandHandler(
private val off: LightOffCommand
) {
fun invoke() {
off.execute()
}
}
하지만 Command 패턴을 적용한 Handler를 만들면 Command Interface를 통해 동적으로 Command를 바꿀 수 있으며 새로운 기능을 추가할 때 기존의 코드를 변경하는 것이 아닌 새로운 클래스를 만들면서 확장할 수 있습니다.
class Handler {
var command: Command? = null
fun invoke() {
command?.execute()
}
}
fun main() {
val handler = Handler()
handler.command = LightOnCommand()
handler.invoke()
handler.command = LightOffCommand()
handler.invoke()
}
'Design Pattern (디자인 패턴)' 카테고리의 다른 글
Design Pattern in A..Z - MVVM (0) | 2021.10.05 |
---|---|
Design Pattern in A..Z - MVP (0) | 2021.10.05 |
Design Pattern in A..Z - MVC (0) | 2021.10.05 |
Design Pattern in A..Z - Singleton (싱글톤) (0) | 2021.10.04 |
Comments