策略

作者: XZhongWen | 来源:发表于2019-03-11 11:18 被阅读0次

iOS设计模式 - 策略

原理图

Strategy.png

说明

  • 把解决相同问题的算法抽象成策略(相同问题指的是输入参数相同,但根据算法不同输出参数会有差异).
  • 策略被封装在对象之中(是对象内容的一部分),策略改变的是对象的内容.
  • 策略模式可以简化复杂的判断逻辑(if - else).

代码实现

人的出行旅游方式有很多种, 即拥有不同的出行策略, 通过选择不同的策略来实现不同的出行方式而不用关心具体的策略实现方式

抽象的策略类

//
//  TravelStrategy.h
//  Strategy
//
//  Created by mye on 2019/3/7.
//  Copyright © 2019 mye. All rights reserved.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface TravelStrategy : NSObject

/**
 出行方式
 */
- (void)travelAlgorithm;

@end

NS_ASSUME_NONNULL_END

//
//  TravelStrategy.m
//  Strategy
//
//  Created by mye on 2019/3/7.
//  Copyright © 2019 mye. All rights reserved.
//

#import "TravelStrategy.h"

@implementation TravelStrategy

- (void)travelAlgorithm {
    
}

@end


具体的策略

//
//  AirPlanelStrategy.h
//  Strategy
//
//  Created by mye on 2019/3/7.
//  Copyright © 2019 mye. All rights reserved.
//

#import "TravelStrategy.h"

NS_ASSUME_NONNULL_BEGIN

@interface AirPlanelStrategy : TravelStrategy

@end

NS_ASSUME_NONNULL_END

//
//  AirPlanelStrategy.m
//  Strategy
//
//  Created by mye on 2019/3/7.
//  Copyright © 2019 mye. All rights reserved.
//

#import "AirPlanelStrategy.h"

@implementation AirPlanelStrategy

- (void)travelAlgorithm {
    NSLog(@"travelbyAirPlain");
}

@end

//
//  TrainStrategy.h
//  Strategy
//
//  Created by mye on 2019/3/7.
//  Copyright © 2019 mye. All rights reserved.
//

#import "TravelStrategy.h"

NS_ASSUME_NONNULL_BEGIN

@interface TrainStrategy : TravelStrategy

@end

NS_ASSUME_NONNULL_END

//
//  TrainStrategy.m
//  Strategy
//
//  Created by mye on 2019/3/7.
//  Copyright © 2019 mye. All rights reserved.
//

#import "TrainStrategy.h"

@implementation TrainStrategy

- (void)travelAlgorithm {
    NSLog(@"travelbyTrain");
}

@end

//
//  BicycleStrategy.h
//  Strategy
//
//  Created by mye on 2019/3/7.
//  Copyright © 2019 mye. All rights reserved.
//

#import "TravelStrategy.h"

NS_ASSUME_NONNULL_BEGIN

@interface BicycleStrategy : TravelStrategy

@end

NS_ASSUME_NONNULL_END

//
//  BicycleStrategy.m
//  Strategy
//
//  Created by mye on 2019/3/7.
//  Copyright © 2019 mye. All rights reserved.
//

#import "BicycleStrategy.h"

@implementation BicycleStrategy

- (void)travelAlgorithm {
    NSLog(@"travelbyBicycle");
}

@end

人持有策略对象

//
//  Person.h
//  Strategy
//
//  Created by mye on 2019/3/7.
//  Copyright © 2019 mye. All rights reserved.
//

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

NS_ASSUME_NONNULL_BEGIN

@interface Person : NSObject

@property (nonatomic, strong) TravelStrategy *travelStrategy;

@end

NS_ASSUME_NONNULL_END

通过选择不同的策略来实现不同的出行方式而不用关心具体的策略实现方式

//
//  ViewController.m
//  Strategy
//
//  Created by mye on 2019/3/7.
//  Copyright © 2019 mye. All rights reserved.
//

#import "ViewController.h"
#import "TravelStrategy.h"
#import "AirPlanelStrategy.h"
#import "TrainStrategy.h"
#import "BicycleStrategy.h"
#import "Person.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    TravelStrategy *travelStrategy = [[AirPlanelStrategy alloc] init];
    Person *p = [[Person alloc] init];
    
    // 1. 坐飞机旅行
    p.travelStrategy = travelStrategy;
    [p.travelStrategy travelAlgorithm];
    
    // 2. 坐火车旅行
    travelStrategy = [[TrainStrategy alloc] init];
    p.travelStrategy = travelStrategy;
    [p.travelStrategy travelAlgorithm];
    
    // 3. 骑自行车旅行
    travelStrategy = [[BicycleStrategy alloc] init];
    p.travelStrategy = travelStrategy;
    [p.travelStrategy travelAlgorithm];
}


@end

相关文章

  • 谈判中迫使对方让步的策略

    软硬策略(红白脸策略) 制造竞争策略 虚张声势策略 各个击破策略 吹毛求疵策略(先苦后甜) 积少成多策略 最后通牒策略

  • 《伍尔福克教育心理学》读书笔记十

    学习策略包括:元认知策略、认知策略、资源管理策略 一、认知策略包括:(一)复述策略(二)精细加工策略(三)组织策略...

  • 学生学习策略

    学生学习大策略。 考试的策略,记忆的策略,记单词的策略,预习听课作业策略,各科学习的策略。 复习的策略,阅读的策略...

  • 淘宝营销策略有哪些?天晓网络来教你

    淘宝营销策略包括六大方面:产品策略丶品牌策略丶价格策略丶促销策略丶服务策略以及客户关系管理策略。 产品策略 1 什...

  • 读2022年版课程标准

    学习策略,学习策略主要包括元认知策略,认知策略,交际策略,情感管理策略等,其中,元认知策略有助于学生计划监控,评价...

  • Bibox—CTA策略参数详解

    CTA策略简介 Bibox CTA策略分为基础策略和高阶策略 分类 基础策略:双均线、MACD、均线止盈高阶策略:...

  • 路由策略

    路由策略和策略路由 什么是路由策略?路由策略和策略路由有什么区别? 如何配置路由策略? https://blog....

  • 设计模式——策略模式

    策略模式 IStrategy 抽象策略 StrategyOne 具体策略 StrategyTwo 具体策略 Str...

  • 学习策略

    考试大纲:了解学习策略分类,掌握认识策略、元认识策略和资源管理策略。 学习策略的含义及特点 …… 学习策略分类: ...

  • 策略PM入门学习索引

    策略PM入门学习(一)策略PM入门学习(二)策略PM入门学习(三)策略PM入门学习(四)策略PM入门学习(五)策略...

网友评论

      本文标题:策略

      本文链接:https://www.haomeiwen.com/subject/fquvpqtx.html