你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS App設計形式開辟中戰略形式的完成示例

iOS App設計形式開辟中戰略形式的完成示例

編輯:IOS開發綜合

此次引見一下戰略形式(Strategy Pattern),比擬之下是一種比擬簡略的形式。它也叫政策形式(Policy Pattern)。 戰略形式應用的就是面向對象的繼續和多態機制,其他的沒有甚麼玄機。戰略形式合適應用在: 1. 多個類只要在算法或行動上稍有分歧的場景。 2. 算法須要自在切換的場景。 3. 須要屏障算律例則的場景。 應用戰略形式固然也有須要留意的處所,那末就是戰略類不要太多,假如一個戰略家族的詳細戰略數目跨越4個,則須要斟酌混雜形式,處理戰略類收縮和對外裸露成績。在現實項目中,我們普通經由過程工場辦法形式來完成戰略類的聲明。

上面我們就來詳細講授一下戰略形式。

戰略形式界說:

Define a family of algorithms, encapsulate each one, and make them interchangeable.(界說一組算法,將每一個算法都封裝起來,而且是它們之間可以交換。)

上面我把戰略形式的類條理構造圖展現以下:

2016330112133305.jpg (500×165)

如圖所示,Strategy類條理為Context界說了一系列的可供重用的算法和行動,繼續有助於析掏出這些算法中的公共功效。上面我用一個通俗超市裡免費的例子簡略模仿了這個形式。我把個中對應的類引見一下:

Context類———————————CashContext類
Strategy類———————————–CashSuper類
ConcreteStrategyA類—————-CashNormal類
ConcreteStrategyB類—————-CashReDosBat target=_blank class=infotextkey>Bate類
ConcreteStrategyC類—————-CashReturn類
好的,下面就是將要向年夜家展現的Objective C源代碼類。

上面,我把下面對應的類展現出來,供年夜家參考:

留意:本文一切代碼均在ARC情況下編譯經由過程。

CashContext類接口

#import <Foundation/Foundation.h>
#import "CashSuper.h"

@interface CashContext :NSObject{
@private CashSuper *cs;
}
-(CashContext*)MyInit:(int)Types;
-(void)SetCashSuper:(CashSuper*)cashSuper;
-(double)GetResult:(double)money;
@end


CashContext類完成

#import "CashContext.h"
#import "CashNormal.h"
#import "CashReDosBat target=_blank class=infotextkey>Bate.h"
#import "CashReturn.h"

@implementation CashContext

-(CashContext*)MyInit:(int)Types{
    int myTypes;
    myTypes = Types;
    switch(myTypes) {
        case 1:
            [self SetCashSuper:[[CashNormalalloc]init]];
            break;
        case 2:
            [self SetCashSuper:[[CashReturnalloc]MyInit:300 And:100]];
            break;
        case 3:
            [self SetCashSuper:[[CashReDosBat target=_blank class=infotextkey>Batealloc]MyInit:0.8]];
            break;
        default:
            break;
    }
    return self;
}
-(void)SetCashSuper:(CashSuper*)cashSuper{
    cs = cashSuper;
}
-(double)GetResult:(double)money{
    return [cs AcceptCash:money];
}

@end


CashSuper類接口

#import <Foundation/Foundation.h>

@interface CashSuper :NSObject
-(double)AcceptCash:(double)money;
@end


CashSuper類完成

#import"CashSuper.h"

@implementation CashSuper

-(double)AcceptCash:(double)money{
    return -1.0; //這裡前往 -1.0無任何意義,只是為了界說此辦法
}

@end


CashNormal類接口

#import"CashSuper.h"

@interface CashNormal :CashSuper
@end


CashNormal類完成

#import"CashNormal.h"

-(double)AcceptCash:(double)money{
    return money;
}

@end


CashRebate類接口

#import"CashSuper.h"

@interface CashRebate :CashSuper{
@private double moneyRebate;
}
@property double moneyRebate;
-(CashRebate*)MyInit:(double)moneyRebates;
@end


CashRebate完成

#import"CashRebate.h"

@implementation CashRebate
@synthesize moneyRebate;

-(CashRebate*)MyInit:(double)moneyRebates{
    [self setMoneyRebate:moneyRebates];
    return self;
}
-(double)AcceptCash:(double)money{
    return moneyRebate*money;
}

@end


CashReturn類接口

#import "CashSuper.h"

@interface CashReturn :CashSuper{
@private double moneyCondition;
@private double moneyReturn;
}
@property double moneyCondition;
@property double moneyReturn;
-(CashReturn*)MyInit:(double)moneyConditions And:(double)moneyReturns;
@end


CashReturn類完成

#import "CashReturn.h"

@implementation CashReturn
@synthesize moneyReturn;
@synthesize moneyCondition;

-(CashReturn*)MyInit:(double)moneyConditions  And:(double)moneyReturns{
    [self setMoneyReturn:moneyReturns];
    [self setMoneyCondition:moneyConditions];
    return self;
}
-(double)AcceptCash:(double)money{
    double result;
    result = money;
    @try{
        if(money >=moneyCondition){
            result = money - (money /moneyCondition)*moneyReturn;
        }
    }
    @catch(NSException *exception) {
        NSLog(@"Oh!Man!!CashReturn has something wrong!");
    }
    @finally{
        return result;
    }
}

@end


Main辦法挪用

#import <Foundation/Foundation.h>
#import "CashContext.h"

int main (int argc, const char  *argv[])
{
    @autoreleasepool {
        CashContext *cc = [[CashContext alloc]MyInit:3];
        double total;
        total = [cc GetResult:400];
        NSLog(@"Total Money 400,the resual is %f", total);
    }
    return 0;
}


以上是對應的戰略形式中響應的類,有一點須要聲明的是,這些代碼是在有ARC情況下書寫的,所以不須要手動釋放個中的資本。所以有些傳遞指針處所沒有停止手動釋放,在此說明一下。

甚麼情形下須要用戰略形式呢,其實我的懂得是,當我們在剖析需求的進程中,須要在分歧時光運用分歧的營業規矩,便可以斟酌應用戰略形式處置這類變更的能夠性。別的,戰略形式的長處是簡化了單位測試,由於每一個算法都有本身的類,可以經由過程本身的接口零丁測試。

【iOS App設計形式開辟中戰略形式的完成示例】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved