美文网首页
策略模式 (Strategy design pattern)

策略模式 (Strategy design pattern)

作者: lifefruity | 来源:发表于2020-12-18 16:35 被阅读0次

策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化,即封装变化的算法。
在这个例子中有move的一系列算法,和attack的一系列算法。使用它们的客户可以随意改变move的方式或者attack的方式。

优点:解耦,开闭原则
缺点:
1、客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。换言之,策略模式只适用于客户端知道所有的算法或行为的情况。
!!!这个可以用简单工厂结合,就不用客户端知道所有策略类!!!
2、 策略模式造成很多的策略类,每个具体策略类都会产生一个新类。

<?php
/*
场景:一个职务大战僵尸的,有各种不同行走和不同攻击方式的僵尸
*/

interface moveable{
    public function move();
}

interface attackable{
    public function attack();
}

abstract class jiangshi{
    public $moveable;
    public $attackable;
    
    public function setMoveable($moveable){
        $this->moveable = $moveable;
    }
    
    public function getMoveable(){
        return $this->moveable;
    }
    
    public function setAttackable($attackable){
        $this->attackable = $attackable;
    }
    
    public function getAttackable(){
        return $this->attackable;
    }
    
    public abstract function display();

}

class stepByStep implements moveable{
    public function move()
    {
        echo "一步一步走 \n";
    }
}

class runQuickly implements moveable{
    public function move()
    {
        echo "快速跑\n";
    }
}

class biteAttack implements attackable{
    public function attack()
    {
        echo "咬\n";
    }
}

class normalJiangshi extends jiangshi{
    public function __construct($moveable, $attack)
    {
        $this->moveable = $moveable;
        $this->attackable = $attack;
    }

    public function display(){
        echo "我是普通僵尸 \n";
    }
    
    public function move(){
        $this->moveable->move();
    }

    public function attack(){
        $this->attackable->attack();
    }
}

$normal = new normalJiangshi(new stepByStep(), new biteAttack());
$normal->display();
$normal->move();
$normal->attack();

$normal->setMoveable(new runQuickly());
$normal->move();

输出:
我是普通僵尸
一步一步走

快速跑

相关文章

  • 行为型-Strategy

    策略模式的原理与实现 策略模式的原理与实现策略模式,英文全称是 Strategy Design Pattern。在...

  • 策略模式 (Strategy design pattern)

    策略模式是用来封装变化的,在分析过程中需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性...

  • 设计模式-策略模式

    设计模式-策略模式 定义 策略模式(Strategy Pattern)也叫政策模式(Policy Pattern)...

  • 策略模式(Strategy pattern)

    策略模式的定义与特点 定义:策略模式(Strategy Pattern)又叫政策模式(Policy Pattern...

  • Java 8 中的设计模式策略

    概述 在本篇文章中我们对可以在 Java 8 中的设计模式策略(strategy design pattern)进...

  • 策略模式 -- 整体的替换算法

    1. 概述 所谓“策略”(strategy),即程序中的“算法”。策略模式(strategy pattern)可以...

  • 策略模式(strategy pattern)

    策略模式(Strategy pattern) 定义 Define a family of algorithms, ...

  • 策略模式

    策略模式(Strategy pattern),也叫政策模式(Policy Pattern),其定义如下: Defi...

  • 策略模式

    一、定义 策略模式(Strategy pattern)也叫政策模式(Policy Pattern),其定义为:定义...

  • java设计模式-策略模式

    策略模式(Strategy Pattern)也叫做政策模式(Policy Pattern),是一种行为型模式。 一...

网友评论

      本文标题:策略模式 (Strategy design pattern)

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