码迷,mamicode.com
首页 > 其他好文 > 详细

编程-策略模式

时间:2014-12-10 14:19:25      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:策略模式

我们先设想一个场景:把一堆算法塞到同一段代码里,然后用if - else switch - case 来决定使用哪个算法。

比如:表单验证,数据本身可能是NSString, NSInteger, NSFloat... 有时候不仅要验证类型还需要验证长度,或者还有其他的验证... 如果用if,有时候真感觉那是一场噩梦。 赶紧醒醒吧,加上一个策略模式。wow,世界顿时变得很美好。

何为策略模式:

官方定义:定义一系列算法,把他们一个个封装起来,并且是他们可以相互替换。这种模式使得算法可以独立于使用它的客户端而存在。

直接上例子:

有一个CustomTextField需要验证,然后就有一个InputValidator(验证的基类)以及一系列验证的子类, AlphaInputValidator, NumericInputValidator...

1. 在你的controller里面,入口处直接调用:



[(CustomTextField*)textField validate];


2. CustomTextField实现类:


@implementation CustomTextField


@synthesize inputValidator=inputValidator_;


- (BOOL) validate {

    

    NSError *error = nil;

    

    BOOL validationResult = [inputValidator_ validateInput:self error:&error];

    

    if (!validationResult)  {

        

        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:[error localizedDescription]

                                  

                                                            message:[error localizedFailureReason]

                                  

                                                           delegate:nil

                                  

                                                  cancelButtonTitle:NSLocalizedString(@"OK", @"")

                                  

                                                  otherButtonTitles:nil];

        

        [alertView show];

        

        [alertView release];

        

    }

    

    return validationResult;

    

}


@end



@implementation InputValidator


// A stub for any actual validation strategy


- (BOOL) validateInput:(UITextField *)input error:(NSError **) error {

    

    if (error)  {

        

        *error = nil;

        

    }  

    

    return NO;

    

}


接着在 AlphaInputValidator,  NumericInputValidator里写相关的实现。 

好了,现在对策略模式有些了解了。我们再来看看

何时使用策略模式:

1. 一个类在其操作中使用多个条件语句来定义许多行为。我们可以把条件分支移到他们自己的策略类里面。

2. 需要算法的各种变体。

3. 需要避免把复杂的,与算法相关的数据结构暴露给客户端。



编程-策略模式

标签:策略模式

原文地址:http://blog.csdn.net/u011374880/article/details/41844303

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!