디자인 모델
Examples of usage of design patterns in real life code
These are the reference resources for
Menu
power
이 계산기 뒤의 논리는 Calculator
라는 클래스에서 다음과 같이 보일 것이다.class Calculator {
// State
private string display;
// and a whole lot of unrelated other fields
// Resolves expressions like x^y
private power(string expression): number;
// Writes on display
setState(string display): void;
// Parse what's on the display, calculates and overrides the display
calculate(): number;
}
맑은 날에, 우리는 이 프로그램을 위해 취소 메커니즘을 실현하기로 결정했다.이 메커니즘을 실현하는 첫 번째 생각은 방금 한 일의 반함수를 간단하게 응용하는 것일 수도 있다.power
함수에 작용하지 않는다.y = power(x, 2)
는 sqrt(y, 2)
를 적용하지만 power(2, 2)
와 power(-2, 2)
는 같은 결과를 낳기 때문에 사용x
만으로는 명확하게 얻을 수 없다y
.calculate
및 undo
이 스냅샷을 사용하여 계산기 상태를 재설정할 때, 스냅샷에 이전 상태를 저장하는 것이 더욱 간단하고 효과적입니다.Intent
Without violating encapsulation, capture and externalize an object's internal
state so that the object can be restored to this state later.
Calculator
상태 섹션의 대상입니다.Calculator
, 즉 국가의 기원인 곳으로 시작용자로 불리며 이 이야기의 세 번째 역할은 전체 일을 책임지는 사람으로 간수인으로 불린다.// Originator
class Calculator {
private string display;
private power(string expression): number;
setState(string display): void;
calculate(): number;
save(): Snapshot;
restore(Snapshot snapshot): void;
}
// Memento
class Snapshot {
private string state;
getState(): state;
}
// CareTaker
class Application {
Calculator calculator;
Array<Snapshot> undoSnapshots;
Array<Snapshot> redoSnapshots;
calculate(): void {
const snapshot = this.calculator.save()
this.undoSnapshots.push(snapshot)
this.redoSnapshots = []
this.calculator.calculate()
}
undo(): void {
const snapshot = this.undoSnapshots.pop()
this.redoSnapshots.push(snapshot)
this.calculator.restore(snapshot)
}
redo(): void {
const snapshot = this.redoSnapshots.pop()
this.undoSnapshots.push(snapshot)
this.calculator.restore(snapshot)
}
}
score
변수를 클릭할 때마다 스냅샷을 저장한다.You can find a more detailed version of these examples here
shikaan/디자인 모드
실제 코드에서 디자인 모델을 사용하는 예시
디자인 모델
Examples of usage of design patterns in real life code
These are the reference resources for
Disclaimer
I decided to not use Electron for this example for the simple reason that it makes the whole thing more complicated for people not familiar with it and it's not bringing any value to Electron experts. If you're really upset about this, drop a comment and I will add also that example.
keyDown
에 탐지기를 설치하고, 이를 바탕으로 방법 (Memento) 을 호출하거나 명령 (command) 을 보낸다.Game
구성 요소가 하나 있는데, 이것은 모든 게임 논리를 처리한다. 그것은 타일을 이동하고, 타일을 선택하고, 사용자가 승리했는지 계산하는 것이다.이것은 그것을 완벽한 발기자로 만들었다. 왜냐하면 그것도 우리의 저장 상태이기 때문에, 우리는 취소를 통해 복구하기를 희망할 수도 있다.발기인으로서 창설과 복구Snapshot
s를 책임진다는 것을 의미한다.Snapshot
는 당연히 기념품이다. Game
ES6 모듈에 있어서는'사적인'것이기 때문에 KeyboardEventHandler
(또는 관리자)가 그것을 알지 못하게 한다.CommandManager
Game
와 KeyboardEventHandler
의 역할은 변화가 없지만 실현에 따라 작업 방식이 다르다.Game
는 현재 명령의 수신자이고 KeyboardEventHandler
는 고객이며 Command
의 유일한 소유자이다.moveSelectedTile
) 은 순수한 동작이고 부작용이 없기 때문에 우리는 실제적으로 스냅샷을 사용해서 상태를 재구성할 필요가 없습니다. 역방향 함수를 사용하면 충분합니다.takeSnaphot
방법으로 CareTaker
과 Originator
을 결합할 수 있습니다.또는, 당신은 봉인moveSelectedTile
할 수 있습니다. 우리가 이미 한 것처럼 명령에서 이 방법을 실행하는 것 외에 스냅샷도 찍을 수 있습니다.마지막으로 Command와 Mememto를 함께 살게 하는 가장 흔한 방식이다.텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)