디자인 모드 에서 의 명령 모드 가 iOS App 개발 에서 의 인 스 턴 스 설명
그럼 명령 모드 의 특징 을 간략하게 말씀 드 리 겠 습 니 다.
위의 이 그림 은 명령 모드 의 클래스 구조의 기본 그림 이다.사실 이 그림 에서 많은 것 을 확장 할 수 있 습 니 다.디 테 일 은 말 하지 않 겠 습 니 다.여러분 에 게 상상 할 수 있 는 공간 을 남 겨 드 리 겠 습 니 다.하하!
아니면 낡은 규칙 입 니까?다음은 실례 를 드 리 겠 습 니 다.
Objective-C 예제:
Command:
//
// NimoCommand.h
// CommandDemo
//
#import <Foundation/Foundation.h>
@protocol NimoCommand <NSObject>
- (void)execute;
@end
ConcreteCommand:
//
// NimoConcreteCommand.h
// CommandDemo
//
#import <Foundation/Foundation.h>
#import "NimoCommand.h"
@class NimoReceiver;
@interface NimoConcreteCommand : NSObject <NimoCommand>
@property (nonatomic) NimoReceiver *receiver;
- (id)initWithReceiver:(NimoReceiver *)receiver;
@end
//
// NimoConcreteCommand.m
// CommandDemo
//
#import "NimoConcreteCommand.h"
#import "NimoReceiver.h"
@implementation NimoConcreteCommand
- (void)execute
{
[_receiver action];
}
- (id)initWithReceiver:(NimoReceiver *)receiver
{
if (self = [super init]) {
_receiver = receiver;
}
return self;
}
@end
Receiver:
//
// NimoReceiver.h
// CommandDemo
//
#import <Foundation/Foundation.h>
@interface NimoReceiver : NSObject
- (void)action;
@end
//
// NimoReceiver.m
// CommandDemo
//
#import "NimoReceiver.h"
@implementation NimoReceiver
- (void)action
{
NSLog(@" ");
}
@end
Invoker:
//
// NimoInvoker.h
// CommandDemo
//
#import <Foundation/Foundation.h>
#import "NimoCommand.h"
@interface NimoInvoker : NSObject
@property (nonatomic, weak) id<NimoCommand> command;
- (void)executeCommand;
@end
//
// NimoInvoker.m
// CommandDemo
//
#import "NimoInvoker.h"
@implementation NimoInvoker
- (void)executeCommand
{
[_command execute];
}
@end
Client:
//
// main.m
// CommandDemo
//
#import <Foundation/Foundation.h>
#import "NimoReceiver.h"
#import "NimoInvoker.h"
#import "NimoConcreteCommand.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
NimoReceiver *receiver = [[NimoReceiver alloc] init];
NimoConcreteCommand *command = [[NimoConcreteCommand alloc] initWithReceiver:receiver];
NimoInvoker *invoker = [[NimoInvoker alloc] init];
invoker.command = command;
[invoker executeCommand];
}
return 0;
}
Running:
2015-08-13 22:49:56.412 CommandDemo[1385:43303]
Cocoa Touch 프레임 의 명령 모드:NSInvocation 대상
다음 예제 에서 클 라 이언 트 는 Receiver 를 직접 호출 하 는 방법 이 아니 라 NSInvocation 대상 으로 실행 시 라 이브 러 리 가 Receiver 에 실행 메 시 지 를 보 내 는 데 필요 한 모든 정 보 를 패키지 합 니 다.이 NSInvocation 대상 은 위의 Concretecond 대상 과 유사 합 니 다.
Receiver:
//
// NimoReceiver.h
// InvocationDemo
//
#import <Foundation/Foundation.h>
@interface NimoReceiver : NSObject
- (int)printWithName:(NSString *)name gender:(NSString *)gender age:(int)age;
@end
//
// NimoReceiver.m
// InvocationDemo
//
#import "NimoReceiver.h"
@implementation NimoReceiver
- (int)printWithName:(NSString *)name gender:(NSString *)gender age:(int)age
{
NSLog(@"My name is %@, %@, %d years old.", name, gender, age);
return 119;
}
@end
Client:
//
// main.m
// InvocationDemo
//
#import <Foundation/Foundation.h>
#import "NimoReceiver.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// Receiver NSInvocation , Receiver action
NimoReceiver *receiver = [[NimoReceiver alloc] init];
NSString *name = @"Lee";
NSString *gender = @"male";
int age = 28;
SEL sel = @selector(printWithName:gender:age:);
NSMethodSignature *methodSignature = [[receiver class] instanceMethodSignatureForSelector:sel];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:methodSignature];
[invocation setTarget:receiver];
[invocation setSelector:sel];
[invocation setArgument:&name atIndex:2];
[invocation setArgument:&gender atIndex:3];
[invocation setArgument:&age atIndex:4];
[invocation retainArguments];
[invocation invoke]; // NSInvocation invoke , Receiver action
int returnValue = 0;
[invocation getReturnValue:&returnValue];
NSLog(@"returnValue: %d", returnValue);
}
return 0;
}
Running:
2015-08-14 13:37:44.162 InvocationDemo[1049:36632] My name is Lee, male, 28 years old.
2015-08-14 13:37:44.164 InvocationDemo[1049:36632] returnValue: 119
사실 클래스 관계 도 에서 쉽게 알 수 있 듯 이 명령 모드 는 수요(Invoker)와 구체 적 인 실현(Receiver)을 명령 층(Command)을 통 해 결합 시 켰 다.구체 적 인 실현 과정 은 명령 에 따라 구분 되 었 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.