iOS 디자인 모드 - 비망록 모드
Originator (원 발 기): 현재 시간의 내부 상 태 를 기록 하고 백업 이 필요 한 상 태 를 정의 하 며 memento 를 만 드 는 것 을 책임 지고 memento 에서 상 태 를 회복 하 는 것 을 책임 집 니 다.
Memento (비망록): Originator 의 내부 상 태 를 저장 하고 필요 할 때 Originator 내부 상 태 를 제공 합 니 다.
Caretaker (관리인): Memento 를 안전 한 곳 에 보관 하고 추출 을 책임 집 니 다.
한 마디 로 요약: Originator 는 그 상 태 를 포함 하 는 Memento 를 만 들 고 Caretaker 에 게 보관 합 니 다. Caretaker 는 어떻게 Memento 와 상호작용 을 하 는 지 모 르 고 Memento 를 안전 한 곳 에 만 보관 합 니 다.
Objective - C 코드 구현:
Originator:
//
// NimoOriginator.h
// MementoDemo
//
// Created by Tony on 15/8/12.
// Copyright (c) 2015 NimoWorks. All rights reserved.
//
// : , , 。
#import <Foundation/Foundation.h>
@class NimoMemento;
@interface NimoOriginator : NSObject
@property (nonatomic, copy) NSString* state;
- (NimoMemento *)createMemento;
- (void)restoreMemento:(NimoMemento *)memento;
@end
//
// NimoOriginator.m
// MementoDemo
//
// Created by Tony on 15/8/12.
// Copyright (c) 2015 NimoWorks. All rights reserved.
//
#import "NimoOriginator.h"
#import "NimoMemento.h"
@implementation NimoOriginator
- (NimoMemento *)createMemento
{
NimoMemento *memento = [[NimoMemento alloc] initWithState:_state];
return memento;
}
- (void)restoreMemento:(NimoMemento *)memento
{
_state = memento.state;
}
- (NSString *)description
{
return [NSString stringWithFormat:@"State:%@", _state];
}
@end
Memento:
//
// NimoMemento.h
// MementoDemo
//
// Created by Tony on 15/8/12.
// Copyright (c) 2015 NimoWorks. All rights reserved.
// : , 。
#import <Foundation/Foundation.h>
@interface NimoMemento : NSObject
@property (nonatomic, copy, readonly) NSString *state;
- (id)initWithState:(NSString *)state;
@end
//
// NimoMemento.m
// MementoDemo
//
// Created by Tony on 15/8/12.
// Copyright (c) 2015 NimoWorks. All rights reserved.
//
#import "NimoMemento.h"
@interface NimoMemento()
@property (nonatomic, copy, readwrite) NSString *state;
@end
@implementation NimoMemento
- (id)initWithState:(NSString *)state
{
if (self = [super init]) {
_state = [state copy];
}
return self;
}
@end
Caretaker:
//
// NimoCaretaker.h
// MementoDemo
//
// Created by Tony on 15/8/12.
// Copyright (c) 2015 NimoWorks. All rights reserved.
// : , 。
#import <Foundation/Foundation.h>
@class NimoMemento;
@interface NimoCaretaker : NSObject
@property (nonatomic, assign) NimoMemento *memento;
@end
//
// NimoCaretaker.m
// MementoDemo
//
// Created by Tony on 15/8/12.
// Copyright (c) 2015 NimoWorks. All rights reserved.
//
#import "NimoCaretaker.h"
@implementation NimoCaretaker
@end
Client:
//
// main.m
// MementoDemo
//
// Created by Tony on 15/8/12.
// Copyright (c) 2015 NimoWorks. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "NimoOriginator.h"
#import "NimoMemento.h"
#import "NimoCaretaker.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
NimoOriginator *originator = [[NimoOriginator alloc] init];
originator.state = @"Old";
NSLog(@"%@", originator);
NimoMemento *memento = originator.createMemento;
NimoCaretaker *caretaker = [[NimoCaretaker alloc] init];
caretaker.memento = memento;
originator.state = @"New";
NSLog(@"%@", originator);
[originator restoreMemento:[caretaker memento]];
NSLog(@"%@", originator);
}
return 0;
}
실행:
2015-08-12 20:27:39.184 MementoDemo[1160:34914] State:Old
2015-08-12 20:27:39.186 MementoDemo[1160:34914] State:New
2015-08-12 20:27:39.186 MementoDemo[1160:34914] State:Old
상기 유 니 버 설 코드 가 실 행 된 후에 기대 하 는 결 과 를 얻 을 수 있 지만 완벽 하지 않 습 니 다. Menmento 류 의 실현 에서 저 희 는 state 속성 과 initWith State 초기 화 방법 을 공공 인터페이스 에 노출 시 켰 습 니 다. 이 두 가 지 는 Originator 와 Menmento (즉, Originator 와 Menmento 에 넓 은 인 터 페 이 스 를 제공 하고 Caretaker 등 다른 대상 에 게 좁은 인 터 페 이 스 를 제공 해 야 합 니 다).C + + 등 다른 대상 언어 에 서 는 일반적으로 private 나 friend 를 사용 하여 설명 합 니 다.그러나 오 브 젝 티 브 - C 에 서 는 모든 것 이 공유 되 기 때문에 추가 적 인 기술 이 필요 하 다.
클래스 확장 을 통 해 state 속성 및 initWithState 초기 화 방법 을 주 인터페이스 헤더 파일 NimoMemento. h 에서 분리 합 니 다.
//
// NimoMemento+Private.h
// MementoDemo
//
// Created by Tony on 15/8/13.
// Copyright (c) 2015 NimoWorks. All rights reserved.
//
#import "NimoMemento.h"
@interface NimoMemento ()
@property (nonatomic, copy, readwrite) NSString *state;
- (id)initWithState:(NSString *)state;
@end
이렇게 해서 Originator 와 Menmento 에서 만 \ # import NimoMemento + Private. h 인터페이스 의 사유 화 를 실현 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.