美文网首页
2.策略模式

2.策略模式

作者: Mcyboy007 | 来源:发表于2017-03-06 22:32 被阅读0次

1.需求:

一个部队要出兵作战,部队有3个小队。A小队用a武器,B小队用b武器,C小队用c武器。

  • 实现方式1:

A、B、C都是角色,继承于一个基类
a、b、c都是武器,可以提供一个协议WeaponBehavior,武器使用方法useWeapon()
A、B、C分别在自己的类中实现各自的useWeapon()

以上实现存在问题:

1.useWeapon()的代码可能存在重复代码

  • 实现方式2:

A、B、C都是角色,继承于一个基类
a、b、c都是武器,可以提供一个协议WeaponBehavior,基于该协议实现不同的武器使用行为
A、B、C调用不同的武器行为

以上遵循的原则:

设计原则1:找出应用中可能需要变化之处,把它们独立出来,不要和那些不变的代码混在一起。
设计原则2:针对接口编程,而不是针对实现编程
设计原则3:多用组合,少用继承

二:策略模式

定义了算法族(就是上面鸭子的各种飞行行为),分别封装了起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户

//实现角色可以使用的不同的攻击行为,也就是不同的攻击策略
//武器策略
protocol WeaponBehavior {
    func useWeapon();
}

class AWPBehavior: WeaponBehavior {
    func useWeapon() {
        print("大狙---biu~biu~")
    }
}

class HK48Behavior: WeaponBehavior {
    func useWeapon() {
        print("HK48---tu~tu~tu~")
    }
}

class PistolBehavior: WeaponBehavior {
    func useWeapon() {
        print("手枪--pa~pa~pa~")
    }
}

//上面定义了一系列的武器策略
//下面是用户=================
class Character {
    //默认是配备的是手枪
    private var weapon: WeaponBehavior! = PistolBehavior()
    
    func setWeapon(weapon: WeaponBehavior) {
        self.weapon = weapon
    }
    
    //换手枪
    func changePistol() {
        self.setWeapon(PistolBehavior());
    }
    
    func fire() {
        guard self.weapon != nil else {
            return
        }
        self.weapon.useWeapon()
    }
}

//中尉只配备了手枪和HK48
class Lieutenant: Character {
    
    override init() {
        super.init();
    }
    
    //切换武器(策略):换HK
    func changeHK() {
        self.setWeapon(HK48Behavior());
    }
}

//上尉尉只配备了手枪和大狙
class Captain: Character {
    
    override init() {
        super.init();
    }
    //切换武器(策略):换大狙
    func changeAWP() {
        self.setWeapon(AWPBehavior());
    }
}



//中尉
let lieutenant: Lieutenant = Lieutenant()
lieutenant.fire()

print("\n手枪火力不行,得换HK48\n")

lieutenant.changeHK()
lieutenant.fire()

参考资料:
1)《Header First设计模式》
2)青玉伏案
http://www.cnblogs.com/ludashi/

相关文章

  • 11.7设计模式-策略模式-详解

    设计模式-策略模式 策略模式详解 策略模式在android中的实际运用 1.策略模式详解 2.策略模式在andro...

  • 2.策略模式

    1.需求: 一个部队要出兵作战,部队有3个小队。A小队用a武器,B小队用b武器,C小队用c武器。 实现方式1: A...

  • 2. 策略模式

    策略模式 策略模式定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客...

  • 策略模式

    简介 1.学习本篇博文,我们知道在什么场景下使用策略模式。2.策略模式的优缺点。3.策略模式的思想。 场景 某公司...

  • 2. 设计模式之策略模式

    一、定义 今天我们讨论的设计模式是「策略模式」,策略模式比较好理解,首先我们看一下他的定义: 策略模式是一种定义一...

  • Android设计模式——策略模式

    1.策略模式定义   策略模式定义了一系列的算法,将每一个算法封装起来,他们之间可以做到相互切换。 2.策略模式使...

  • 大话设计模式(1) --- 简单工厂模式|策略模式

    1. 简单工厂模式 简单工厂模式主要用来解决创建实例的问题 2. 策略模式 策略模式是一种定义一系列算法的方法,从...

  • JavaScript 设计模式(中)——2.策略模式

    2 策略模式 策略模式定义: 定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换; 2.1 策略模式 ...

  • iOS 设计模式浅析 1 - 策略

    本篇文章主要讲三个点: 1. 什么是策略模式. 2. 策略模式的优缺点. 3. demo . 1. 策...

  • 深入浅出设计模式(一)-策略模式

    本文解决问题 什么是策略模式? 策略模式的优缺点以及策略模式解决了什么痛点 策略模式的适用环境 什么是策略模式? ...

网友评论

      本文标题:2.策略模式

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