Objective-C設計模式——外觀Faced(介面適配)

來源:互聯網
上載者:User

標籤:

面板模式

外觀設計模式和適配器差不多,不過它門對對象控制的粒度不同,適配器一般只是控制一個系統和用戶端的對接。外觀則是用來抽象多個系統一起工作。

外觀一般具有多個子系統,所以外觀應持有多個子系統的引用,同構向高層提供抽象介面實現封裝。外觀一般是可以多次使用的,比如一個龐大的系統中,可以多次使用外觀來進行封裝,然後再對外觀使用外觀封裝達到多層抽象的目的。

 

使用情境

子系統正逐漸層得複雜。應用模式的過程中演化出來許多類。可以使用外觀為這些子系統類提供一個較簡單的介面。

可以使用外觀對子系統進行分層。每個子系統層級有一個外觀作為進入點。讓它們通過其外觀進行通訊,可以簡化它們的依賴關係。

 

Demo

因為也是介面適配,只不過是應用情境不同,差異並不是很大,就不詳細描述了。

用打的的情境來類比面板模式,打的存在司機開車和計價兩個系統,用Faced進行封裝,提供

driveToLocation:介面

 

#import <Foundation/Foundation.h>@interface Taximeter : NSObject-(void)start;-(void)stop;@end#import "Taximeter.h"@implementation Taximeter-(void)start{    NSLog(@"%@",NSStringFromSelector(_cmd));}-(void)stop{    NSLog(@"%@",NSStringFromSelector(_cmd));}@end#import <Foundation/Foundation.h>@interface Car : NSObject-(void) releaseBrakes;-(void) changeGears;-(void) pressAccelerator;-(void) pressBrakes;-(void) releaseAccelerator;@end#import "Car.h"@implementation Car-(void) releaseBrakes{    NSLog(@"%@",NSStringFromSelector(_cmd));}-(void) changeGears{    NSLog(@"%@",NSStringFromSelector(_cmd));}-(void) pressAccelerator{    NSLog(@"%@",NSStringFromSelector(_cmd));}-(void) pressBrakes{    NSLog(@"%@",NSStringFromSelector(_cmd));}-(void) releaseAccelerator{    NSLog(@"%@",NSStringFromSelector(_cmd));}@end

Faced

#import <Foundation/Foundation.h>@interface Faced : NSObject-(void)driveToLocation:(CGPoint)x;@end#import "Faced.h"#import "Taximeter.h"#import "Car.h"@implementation Faced-(void)driveToLocation:(CGPoint)x{    Taximeter *meter = [Taximeter new];    [meter start];        Car *car = [Car new];    [car releaseBrakes];    [car changeGears];    [car pressAccelerator];        [car releaseAccelerator];    [car pressBrakes];    [meter stop];}@end

用戶端和結果

[[Faced new] driveToLocation:CGPointZero];2015-07-26 11:06:38.004 Faced[656:20064] start2015-07-26 11:06:38.005 Faced[656:20064] releaseBrakes2015-07-26 11:06:38.005 Faced[656:20064] changeGears2015-07-26 11:06:38.006 Faced[656:20064] pressAccelerator2015-07-26 11:06:38.006 Faced[656:20064] releaseAccelerator2015-07-26 11:06:38.006 Faced[656:20064] pressBrakes2015-07-26 11:06:38.006 Faced[656:20064] stop

 

Objective-C設計模式——外觀Faced(介面適配)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.