[다크호스 프로그래머] [OC] 프 록 시 디자인 모델.
2930 단어 Objective-C
1. 무슨 일 대리 모드?
대리 모델 은 oc 에서 자주 만 나 는 디자인 모델 인 데 대리 모델 이 무엇 입 니까?예 를 들 어 한 사람 이 영 화 를 보고 싶 어 했 지만 영화 표를 살 시간 이 없 었 다. 그래서 그 는 한 암표상 에 게 자신 이 표를 사 는 것 을 도와 달라 고 부탁 했다. 그래서 이 사람과 암표상 간 에 협 의 를 체결 했다. 협의 에 암표상 이 무엇 을 해 야 하 는 지 (표 값 을 물 어보 고 표 의 나머지 장 수 를 물 어보 세 요) 라 고 적 혀 있 었 고 암표상 은 바로 이 대리인 이 었 다.즉, 이 사람과 암표상 간 에 협의 가 있 는데 암표상 이 이 협 의 를 지 켰 기 때문에 암표상 은 이 협의 중의 조항 (표 값 을 묻 고 표 의 나머지 장 수 를 묻 는 것) 을 실현 하여 대리인 이 되 어야 한다.
2. 설계 원리
어떤 번 거 로 운 일 들 은 자신 이 직접 하고 싶 지 않 으 면 누 군가 에 게 도움 을 청 할 수 있다. 즉, 대리 대상 에 게 맡 기 는 것 이다.
3. 설계 원칙
1 > 우선 프 록 시 대상 속성 을 가 져 야 합 니 다.
2 > 그 다음 에 대리 가 어떤 방법 이 있 는 지 잘 알 아야 한다.
3 > 마지막 으로 결합 을 풀 수 있 도록
4. 실현 방안
1 > 프로 토 콜 을 정의 합 니 다. 에이전트 와 소통 하 는 방법 을 설명 합 니 다.
2 > 프 록 시 속성 id 가 있 음 delegate
3 > 에이전트 가 protocol 을 준수 하도록 합 니 다.
1. TicketDelegate. h (사람과 암표상 간 에 협 의 된 협의)
#import
//
@protocol TicketDelegate
//
- (double) ticketPrice;
//
- (int) leftTicketsNumber;
@end
2. Agent. h (암표상 에 게 이 협 의 를 준수 하 게 함)
#import
#import "TicketDelegate.h"
@interface Agent : NSObject
@end
3. agent. m (구체 적 인 표 구 매 조작 은 암표상 에 의 해 이 루어 진다)
#import "Agent.h"
@implementation Agent
//
- (int)leftTicketsNumber
{
// ... \
return 1;
}
//
- (double)ticketPrice
{
// ... \
return 1000;
}
@end
4. Person. h (에이전트 속성 을 가지 게 하고 에이전트 가 TicketDelegate 협 의 를 준수 하도록 합 니 다)
#import
#import "TicketDelegate.h"
@interface Person : NSObject
- (void) buyTicket;
//
// id
// TicketDelegate
@property (nonatomic, retain) id delegate;
@end
5. Person. m (대리 에 게 자신 을 도와 표를 사도 록 하 세 요: 표 값 을 물 어보 고 표 의 나머지 장 수 를 물 어보 세 요)
#import "Person.h"
@implementation Person
//
- (void)buyTicket
{
// ( 、 )
double price = [_delegate ticketPrice];
int number = [_delegate leftTicketsNumber];
NSLog(@" , =%f, %d ", price, number);
}
- (void)dealloc
{
[_delegate release];
[super dealloc];
}
@end
6. main. m (각각 사람과 암표상 류 를 만 들 고 암표상 에 게 표를 사 게 한다)
#import
#import "Person.h"
#import "Agent.h"
#import "NextAgent.h"
int main(int argc, const char * argv[])
{
//
Person *p = [[Person alloc] init];
//
Agent *a = [[Agent alloc] init];
//
p.delegate = a;
//
[p buyTicket];
[a release];
[p release];
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
PreferenceBundle에서 오른쪽 상단에 Respring 버튼을 클릭합니다.만나서 반갑습니다, Minazuki라고합니다. 프로필 이름 : Minazuki_dev Twitter : Repo : 아직 중학생이므로 말이 이상한 곳이 있습니다만 용서해 주세요… 🙏 theos (Mac이든 단품이든 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.