인 스 턴 스 분석 디자인 모델 의 외관 모델 이 iOS App 개발 에서 의 활용
다음은 여러분 에 게 유형의 구조 도 를 보 여 드 리 겠 습 니 다.보시 면 아 실 겁 니 다.
사실 이 모델 에서 유형 과 유형 간 의 계승 관 계 는 없고 간단 한 유형 인용 을 하여 대외 인 터 페 이 스 를 통일 시 켰 을 뿐이다.쉬 워 보이 지 않 아 요?쓸데없는 소리 그만 하고 코드 를 간단하게 보 여 드 리 겠 습 니 다!
주의:본 논문 의 모든 코드 는 ARC 환경 에서 컴 파일 되 었 습 니 다.
SubSystem One 클래스 인터페이스
#import <Foundation/Foundation.h>
@interface SubSystemOne:NSObject
-(void)MethodOne;
@end
SubSystem One 클래스 구현
#import "SubSystemOne.h"
@implementation SubSystemOne
-(void)MethodOne{
NSLog(@" ");
}
@end
SubSystem 두 가지 인터페이스
#import <Foundation/Foundation.h>
@interface SubSystemTwo:NSObject
-(void)MethodTwo;
@end
SubSystem 두 가지 구현
#import "SubSystemTwo.h"
@implementation SubSystemTwo
-(void)MethodTwo{
NSLog(@" ");
}
@end
SubSystem 3 클래스 인터페이스
#import <Foundation/Foundation.h>
@interface SubSystemThree:NSObject
-(void)MethodThree;
@end
SubSystem Three 클래스 구현
#import "SubSystemThree.h"
@implementation SubSystemThree
-(void)MethodThree{
NSLog(@" ");
}
@end
SubSystem 4 클래스 인터페이스
#import <Foundation/Foundation.h>
@interface SubSystemFour:NSObject
-(void)MethodFour;
@end
SubSystem 4 류 구현
#import "SubSystemFour.h"
@implementation SubSystemFour
-(void)MethodFour{
NSLog(@" ");
}
@end
Facade 클래스 인터페이스
#import<Foundation/Foundation.h>
@class SubSystemOne;// @class ( )
@class SubSystemTwo;
@class SubSystemThree;
@class SubSystemFour;
@interface Facade :NSObject{
@private SubSystemOne *one;
@private SubSystemTwo *two;
@private SubSystemThree *three;
@private SubSystemFour *four;
}
-(Facade*)MyInit;
-(void)MethodA;
-(void)MethodB;
@end
Facade 류 실현
#import "Facade.h"
#import "SubSystemOne.h"
#import "SubSystemTwo.h"
#import "SubSystemThree.h"
#import "SubSystemFour.h"
@implementation Facade
-(Facade*)MyInit{
one= [[SubSystemOne alloc]init];
two= [[SubSystemTwo alloc]init];
three= [[SubSystemThree alloc]init];
four= [[SubSystemFour alloc]init];
return self;
}
-(void)MethodA{
NSLog(@"
A() ---- ");
[one MethodOne];
[two MethodTwo];
[three MethodThree];
[four MethodFour];
}
-(void)MethodB{
NSLog(@"
B() ---- ");
[two MethodTwo];
[three MethodThree];
}
@end
Main()방법 호출
#import <Foundation/Foundation.h>
#import "Facade.h"
int main (int argc,const char * argv[])
{
@autoreleasepool{
Facade *facade = [[Facade alloc]MyInit];
[facade MethodA];
[facade MethodB];
}
return 0;
}
소프트웨어 를 개발 할 때 외관 모델 을 사용 하 는 상황 을 고려 하면 일반적으로 세 가지 상황 으로 나 뉜 다.첫 번 째 상황 은 디자인 초기 단계 에 서로 다른 두 개의 층 을 의식 적 으로 분리 하고 층 과 층 간 에 외관 Facade 를 구축 해 야 한다.그러면 복잡 한 서브 시스템 에 간단 한 인 터 페 이 스 를 제공 하여 결합 을 크게 낮 출 수 있다.두 번 째 상황 에서 개발 단계 에 서브 시스템 은 끊 임 없 는 재 구성 과 진화 로 인해 점점 복잡 해 지고 외관 Facade 를 증가 하면 간단 한 인 터 페 이 스 를 제공 하여 그들의 의존 을 줄 일 수 있다.세 번 째 상황 은 남 겨 진 대형 시스템 을 유지 할 때 이 시스템 은 유지 하기 어렵 고 확장 하기 어 려 울 것 이다.만약 에 새로운 수요 가 있 으 면 새로운 시스템 에 외관 Facade 류 를 개발 하여 디자인 이 거 칠 거나 고도 로 복잡 한 남 겨 진 코드 의 비교적 뚜렷 하고 간단 한 인 터 페 이 스 를 제공 하여 새로운 시스템 과 Facade 대상 이 상호작용 을 하도록 할 수 있다.Facade 는 남 겨 진 코드 와 모든 복잡 한 작업 을 상호작용 하면 비교적 낮은 결합 도 를 유지 할 수 있다.인 스 턴 스 진급
현재 로 컬 에 앨범 데 이 터 를 저장 하고 HTTP Client 에서 원 격 통신 을 처리 하 는 Persistency Manager 가 있 습 니 다.프로젝트 의 다른 종 류 는 이런 논리 와 관계 가 없다.
이 모드 를 실행 하면 Library API 만 Persistency Manager 와 HTTP Client 의 인 스 턴 스 를 저장 합 니 다.이후 Library API 는 이 서비스 에 접근 하기 위 한 간단 한 API 를 공개 할 것 이다.
Library API 는 다른 코드 에 공개 되 지만 앱 에 있 는 HTTP Client 와 Persistency Manager 의 복잡 한 부분 을 숨 깁 니 다.
Library API.h 를 열 고 맨 위 에 면 파일 을 가 져 옵 니 다:
#import "Album.h"
다음은 Library API.h 에 다음 과 같은 방법 을 추가 합 니 다.
- (NSArray*)getAlbums;
- (void)addAlbum:(Album*)album atIndex:(int)index;
- (void)deleteAlbumAtIndex:(int)index;
현재 이 방법 들 은 모두 다른 종류 에 공개 되 었 다.Library API.m 파일 에 다음 두 개의 파일 을 도입 합 니 다.
#import "PersistencyManager.h"
#import "HTTPClient.h"
이곳 에서 만 이런 종 류 를 도입 해 야 한다.기억 하기:당신 의 API 는 복잡 한 시스템 의 유일한 접속 점 이 될 것 입 니 다.
현재 클래스 확장 에 개인 속성 을 추가 합 니 다(@implementation 위)
@interface LibraryAPI () {
PersistencyManager *persistencyManager;
HTTPClient *httpClient;
BOOL isOnline;
}
@end
isOnline 은 앨범 목록 데이터 가 바 뀌 면 서버 에 업데이트 할 수 있 는 지,예 를 들 어 앨범 을 추가 하거나 삭제 할 수 있 는 지 판단 합 니 다.init 방법 에서 이 변 수 를 초기 화해 야 합 니 다.Library API.m 에 다음 코드 를 추가 하 십시오.
- (id)init
{
self = [super init];
if (self) {
persistencyManager = [[PersistencyManager alloc] init];
httpClient = [[HTTPClient alloc] init];
isOnline = NO;
}
return self;
}
이 HTTP 클 라 이언 트 는 여기 서 진정한 작업 이 아 닙 니 다.외관 디자인 에서 시범 적 인 용법 의 역할 을 하기 때문에 isOnline 은 영원히 NO 입 니 다.다음은 Library API.m 에 다음 세 가지 방법 을 추가 합 니 다.
- (NSArray*)getAlbums
{
return [persistencyManager getAlbums];
}
- (void)addAlbum:(Album*)album atIndex:(int)index
{
[persistencyManager addAlbum:album atIndex:index];
if (isOnline)
{
[httpClient postRequest:@"/api/addAlbum" body:[album description]];
}
}
- (void)deleteAlbumAtIndex:(int)index
{
[persistencyManager deleteAlbumAtIndex:index];
if (isOnline)
{
[httpClient postRequest:@"/api/deleteAlbum" body:[@(index) description]];
}
}
addAlbum:atIndex:를 보 세 요.이 종 류 는 먼저 로 컬 데 이 터 를 업데이트 하고 인터넷 을 연결 하면 원 격 서버 를 업데이트 합 니 다.이것 이 바로 외관 디자인 의 장점 이다.일부 시스템 밖의 클래스 가 새 앨범 을 추 가 했 을 때,그것 은 모 르 고,알 필요 도 없 는 복잡 한 내부 시스템 이다.알림:하위 시스템 에서 외관 류 를 디자인 할 때 고객 이 이러한'숨 김'류 에 접근 하 는 것 을 막 을 수 있 는 것 이 없다 는 것 을 기억 하 세 요.방어 적 인 코드 를 많이 써 야 합 니 다.모든 고객 이 똑 같은 방식 으로 당신 의 외관 류 를 사용 할 것 이 라 고 생각 하지 마 세 요.
프로그램 을 실행 하면 검 은 바탕 에 빈 내용 의 화면 을 볼 수 있 습 니 다.아래 와 같이:
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.