美文网首页
《设计模式》之策略模式

《设计模式》之策略模式

作者: 魅猫之 | 来源:发表于2020-05-10 21:44 被阅读0次
定义

策略模式:定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户

策略模式的核心的“策略”两个字,什么是策略呢,我的理解是策略是可以随时更换的,这样操作可以很灵活,比如我在玩CS的时候(假设我身上已经拥有很多武器了):

  1. 如果敌人在远处,那我就使用阻击枪瞄准,一枪爆头!
  2. 如果敌人在迅速靠近,那我就切换AK,一顿扫射!
  3. 如果敌人已经到了身边,用枪是很难瞄准,那我就切换小刀,一顿乱砍!

写一个武器的接口,所有武器都需要实现这个接口:

// 武器接口
interface IWeapon {
    fire(): void,
    description(): string,
}

阻击枪的实现

// 阻击枪
class Sniper implements IWeapon {
    fire() {
        console.log(`使用${this.description()}一枪爆头!`)
    }
    description(): string {
        return '阻击枪'
    }
}

AK的实现

// AK
class AK implements IWeapon {
    fire() {
        console.log(`使用${this.description()}一顿扫射!`)
    }
    description(): string {
        return 'AK'
    }
}

小刀的实现

// 小刀
class Knife implements IWeapon {
    fire() {
        console.log(`使用${this.description()}一顿乱砍!`)
    }
    description(): string {
        return '小刀'
    }
}

三种武器都实现了IWeapon接口,现在写一个玩家类

// 玩家
class Player {
    weapon?: IWeapon
    setWeapon(weapon: IWeapon) {
        this.weapon = weapon
        console.log(`切换武器:${weapon.description()}`)
    }
    fire() {
        this.weapon?.fire()
    }
}

使用方式:

// 拥有的武器
const sniper: IWeapon = new Sniper()
const ak: IWeapon = new AK()
const knife: IWeapon = new Knife()

// 一个玩家
const p = new Player()

// 如果敌人在远处,那我就使用阻击枪瞄准,一枪爆头!
p.setWeapon(sniper)
p.fire()

// 如果敌人在迅速靠近,那我就切换AK,一顿扫射!
p.setWeapon(ak)
p.fire()

// 如果敌人已经到了身边,用枪是很难瞄准,那我就切换小刀,一顿乱砍!
p.setWeapon(knife)
p.fire()

输出结果:

[LOG]: 切换武器:阻击枪 
[LOG]: 使用阻击枪一枪爆头! 
[LOG]: 切换武器:AK 
[LOG]: 使用AK一顿扫射! 
[LOG]: 切换武器:小刀 
[LOG]: 使用小刀一顿乱砍! 

原则:

  • 封装变化
  • 多用组合,少用继承
  • 针对接口编程,不针对实现编程

相关文章

  • PHP设计模式之策略模式

    PHP设计模式之策略模式

  • PHP设计模式之策略模式

    PHP设计模式之策略模式

  • 简说设计模式之策略模式

    前言:对于设计模式基础概念可以去看[简说设计模式之设计模式概述] 一、什么是策略模式 策略(Strategy)模式...

  • 策略模式

    参考资料:漫话:如何给女朋友解释什么是策略模式? 设计模式之策略模式(实例+Demo) Java设计模式(8)——...

  • 学习Head First设计模式Day1

    Java设计模式之设计模式 策略模式:策略模式定义了算法簇,分别封装起来,让他们之间可以互相替换,此设计模式让算法...

  • 策略模式 2018-11-04

    设计模式之策略模式 官方说明设计模式的3个角色: 环境角色:context , 持有一个策略的引用 抽象策略角色,...

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

    Java设计模式之策略模式 这期分享的模式是策略模式是程序设计中最常用的了,因为开发工作中总是会使用到策略模式。 ...

  • 策略模式

    本文参考自: 《JAVA设计模式》之策略模式(Strategy) 1. 作用 策略模式属于对象的行为模式。其用意是...

  • 设计模式(Swift) - 单例模式、备忘录模式和策略模式

    设计模式(Swift) - 单例模式、备忘录模式和策略模式 设计模式(Swift) - 单例模式、备忘录模式和策略模式

  • 设计模式之策略模式总结

    再上一篇文章《设计模式之策略模式》中,我们通过模拟鸭子项目,了解了什么是策略模式,怎么使用策略模式。本文将通过鸭子...

网友评论

      本文标题:《设计模式》之策略模式

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