【设计模式】一、 策略模式

一、概述

      策略模式:定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。也称为政策模式(Policy)。(Definea family of algorithms,encapsulate each one, andmake them interchangeable. Strategy lets the algorithmvary independently from clients that use it. 

(策略模式把对象本身和运算规则区分开来,其功能非常强大,因为这个设计模式本身的核心思想就是面向对象编程的多形性的思想。)

      策略模式使用的就是面向对象的继承多态机制。

    策略模式适合使用在: 1. 多个类只有在算法或行为上稍有不同的场景。 2. 算法需要自由切换的场景。 3. 需要屏蔽算法规则的场景。

     使用策略模式当然也有需要注意的地方,那么就是策略类不要太多,如果一个策略家族的具体策略数量超过4个,则需要考虑混合模式,解决策略类膨胀和对外暴露问题。在实际项目中,我们一般通过工厂方法模式来实现策略类的声明。

二、在OC中的实现

以下内容来源于wnnvv的博客

     加入去超市购物,付款的方式有很多种:现金支付、银行卡支付、信用卡支付等等。

1、创建一个父类

@interface Strategy : NSObject
- (void)pay;
@end

2、创建一个现金支付类,继承strategy,重写pay方法

@interface payCash : Strategy
@end
@implementation payCash
- (void)pay
{
    NSLog(@"使用现金支付");
}
@end

3、创建一个银行卡支付类,同上

@interface payCard : Strategy
@end
@implementation payCard
- (void)pay
{
    NSLog(@"使用银行卡支付");
}
@end

4、创建组织类,用于将各个方法类组织在一起

@implementation Context
+ (void)contextToUse:(id)strategy
{
    Strategy *st = strategy;
    [st pay];
}
@end

5、使用,将具体的使用方法传入context

[Context contextToUse: [[payCash alloc]init]]; 

6、总结:策略模式将功能相同或者相似的具体策略从功能大类中分离开,再组织起来,降低耦合性,每个具体类的修改都不会影响其他类。 


参考文章:

一、hguisu   设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 

原文地址:https://www.cnblogs.com/ymonke/p/3463254.html