美文网首页
IOS策略模式和多态

IOS策略模式和多态

作者: 枫叶1234 | 来源:发表于2018-05-07 13:40 被阅读76次

策略模式是一种常见的软件设计模式,这里简单得介绍一下策略模式并用IOS简单实现一下。
所谓的策略模式,顾名思义是要采用不同的策略的。一般来说,在不同的情况下,处理某一个问题的方法也不一样。比如说对字符串的排序和对数字的排序,虽然用的都是快排,但是显然不可能使用一段通用的代码。有人说java里面的compareTo可以做到,但如果考虑这么一个问题:同样是出门旅行,老年人身体虚弱,需要大量的休息,而孩子则是精力充沛,希望玩到更多的景点。如何在同一模式下表达以上信息、采用合理的设计模式进行封装而不是大量重写类似的代码,就需要学习并采用策略模式。
首先建立一个通用的策略,这里直接命名为Strategy。这个类是最终暴露出来,需要被调用的类。

//Strategy.h
#import <Foundation/Foundation.h>
@interface Strategy : NSObject
- (void) go;
@end
//Strategy.m
#import "Strategy.h"
@implementation Strategy
- (void)go{
    NSLog(@"I am going outside");
}
@end

.m方法里并没有过多的实现go方法,可以看到只写了一个NSLog,其实也完全可以不写。这个类有点接近于java中的interface和C++中的纯虚类。因为这个是一个通用的,暴露出来的接口,所以具体的实现并不需要在strategy类中的go方法内完成。
接下来定义两个类,分别继承自Strategy类,这两个类中包含了具体的方法实现,是功能的主体部分。

//OldPeopleTravel.h
#import <Foundation/Foundation.h>
#import "Strategy.h"
@interface OldPeopleTravel : Strategy
- (void) go;
@end

.m文件里是具体的针对对老年人的实现方法

//OldPeopleTravel.h
#import "OldPeopleTravel.h"
@implementation OldPeopleTravel

-(void)go{
    [super go];
    NSLog(@"I am old, I need rest");
}

@end

类似的还有YoungPeopleTravel的.h和.m文件

//YoungPeopleTravel.h
#import "Strategy.h"

@interface YoungPeopleTravel : Strategy

- (void) go;

@end
//YoungPeopleTravel.m
#import "YoungPeopleTravel.h"

@implementation YoungPeopleTravel

- (void) go{
    [super go];
    NSLog(@"I am young, I am energetic");
}

@end

以上是策略类和具体的实现类的实现,接下来就是调用这个策略了。

//ViewController.m
#import "ViewController.h"
#import "Strategy.h"
#import "OldPeopleTravel.h"
#import "YoungPeopleTravel.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self goOutside:[[OldPeopleTravel alloc]init]];
    [self goOutside:[[YoungPeopleTravel alloc]init]];
}

- (void)goOutside:(id)theStrategy{
    Strategy *strategy = theStrategy;
    [strategy go];
}

@end

可以看到,最终我们调用的是自己的goOutside方法,方法中有一个参数是strategy,通过传入不同的参数(策略),就可以调用这个策略下具体的方法实现。运行结果表示策略模式已经成功的实现了。通过调用不同的策略,得到了不同的处理结果。

相关文章

  • IOS策略模式和多态

    策略模式是一种常见的软件设计模式,这里简单得介绍一下策略模式并用IOS简单实现一下。所谓的策略模式,顾名思义是要采...

  • 设计模式:(四)行为型模式

    一、策略模式 策略模式使用的就是面向对象的继承和多态机制,非常容易理解和掌握,策略模式的三个角色: Context...

  • iOS绘图

    ios阶段算法回调多态(观察者模式)把多态真正明白上一大台阶程序设计设计模式if else少出 创建UIBezie...

  • 代码优化01

    1、if 判断的优化策略模式利用组合、委托和多态等技术和思想,可以有效地避免多重条件选择语句。它提供了对开放—封闭...

  • 使用策略模式和多态去掉if/else、switch

    很多时候我们会在代码中使用很笨矬的if/else、switch语句,代码阅读起来相当的吃力。有没有一种方式可以替换...

  • 策略模式

    定义 策略模式使用的就是java中继承和多态,定义不同的算法,将它们封装起来,让他们之间可以互换。 代码实现 创建...

  • Objective-C继承多态静态工厂模式

    继承和多态 静态工厂方法模式

  • 策略模式和状态模式

    不怕跌倒,所以飞翔 本文中知识点概述: 策略模式和状态模式的基本概念 策略模式和状态模式的区别 策略模式和状态模式...

  • 设计模式

    iOS设计模式(5)策略模式 iOS适配器设计模式其实就是对某个控件上的各个部分,用一个model来统一赋值,而在...

  • iOS - 策略模式

    定义 策略模式是一种比较简单的模式,也叫政策模式。定义一系列的算法,把它们一个个封装起来,并且使它们可相互替代。 ...

网友评论

      本文标题:IOS策略模式和多态

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