资讯专栏INFORMATION COLUMN

「HEAD-FIRST」之策略模式

mikyou / 2775人阅读

摘要:这是一个设计模式系列本书所有案例均来自设计模式中文版地址欢迎大家策略模式定义了算法族,分别封装起来,让他们之间可以相互调用,此模式让算法的变化独立与调用算法的客户端。

这是一个设计模式系列,本书所有案例均来自「Head-First设计模式(中文版)」, Github地址, 欢迎大家 watch, star

策略模式

定义了算法族,分别封装起来,让他们之间可以相互调用,此模式让算法的变化独立与调用算法的客户端。

设计谜题

一个冒险游戏,有多个游戏角色可以使用不同的武器,游戏中角色可以自由的切换武器,每个角色一次只能使用一样武器.

类图设计如下

抽象的武器行为接口

interface WeaponBehavior
{
    /**
     * 设置具体使用什么样的武器
     *
     */
    public function useWeapon();
}

武器的具体实现类

class KnifeBehavior implements WeaponBehavior
{
    public function useWeapon()
    {
        //使用小刀
        return 1;
    }
}

class SwordBehavior implements WeaponBehavior
{
    public function useWeapon()
    {
        //使用大保健
        return 1024;
    }
}

//...

各种游戏角色均继承自Character超类。

abstract public class Character
{
    protected $weapon;

    public function setWeapon(WeaponBehavior $weapon)
    {
        $this->weapon = $weapon;
    }

    /**
     * 获取角色战斗力
     */
    public function fightPower()
    {
        return $this->weapon->useWeapon()
    }
}

角色的具体实现.

class King extends Character
{
    public function __construct()
    {
        //国王使用斧头
        $this->setWeapon(new SwordBehavior);
    }
}

class Queen extends Character
{
    public function __construct()
    {
        //王后使用匕首
        $this->setWeapon(new KnifeBehavior);
    }
}
等等...

我们的设计原则是针对接口编程,但是我们仍然在角色的构造函数里制造一个具体的武器行为类.

因为这是我们的第一个设计模式,后面我们将用其他模式更正这一点.

战斗
(new King)->fightPower(); //1024;
(new Queen)->fightPower(); //1;

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/26169.html

相关文章

  • HEAD-FIRST观察者模式

    摘要:这是一个设计模式系列本书所有案例均来自设计模式中文版地址欢迎大家观察者模式定义了对象之间的一对多依赖当一个对象改变状态时它的所有依赖者都将会收到通知并自动更新观察者模式形容图设计谜题有一个气象观察站我们希望建立一个应用有三种布告板用于显示 这是一个设计模式系列,本书所有案例均来自「Head-First设计模式(中文版)」, Github地址, 欢迎大家 watch, star 观察者模...

    Songlcy 评论0 收藏0
  • 学习Java必读的10本书籍

    摘要:学习编程的本最佳书籍这些书涵盖了各个领域,包括核心基础知识,集合框架,多线程和并发,内部和性能调优,设计模式等。擅长解释错误及错误的原因以及如何解决简而言之,这是学习中并发和多线程的最佳书籍之一。 showImg(https://segmentfault.com/img/remote/1460000018913016); 来源 | 愿码(ChainDesk.CN)内容编辑 愿码Slo...

    masturbator 评论0 收藏0
  • Hello CKB!

    摘要:模块链的共识配置,该配置会写入创世块。主要指责是记录和更新本地累计工作量最高的链,并维护链上数据的索引。消息使用序列化。协议是节点之间用来处理广播和转发新的交易。 by Nervos CKB Team 在 2017 年底,我们感到心里的一些想法,包括分层的网络以及一个作为共同知识库(Common Knowledge Base)的区块链,都已经成熟。因此 2018 年元旦一过我们就迫不及...

    Kerr1Gan 评论0 收藏0
  • Hello,CKB:构建加密经济网络的重要里程碑

    摘要:年,包括分层的网络以及一个作为共同知识库的区块链,都已经成熟。是一个在设计上非常不同的公有链协议,也是网络中的基础层,是整个加密经济网络的信任引擎。主要指责是记录和更新本地累计工作量最高的链,并维护链上数据的索引。 说到猿起,这些心里的想法能追溯到 2016 年,甚至更早。2017 年,包括分层的网络以及一个作为共同知识库(Common Knowledge Base)的区块链,都已经成...

    fou7 评论0 收藏0
  • PHP面试常考设计模式——策略模式

    摘要:策略模式介绍策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。使用策略模式的好处策略模式提供了管理相关的算法族的办法。使用策略模式可以避免使用多重条件转移语句。 你好,是我琉忆,PHP程序员面试笔试系列图书的作者。 本周(2019.3.11至3.15)的一三五更新的文章如下: 周一:PHP面试常考之设计模式——工...

    Drinkey 评论0 收藏0

发表评论

0条评论

mikyou

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<