发布于2021-03-14 05:59 阅读(1300) 评论(0) 点赞(21) 收藏(3)
首先定义一个英雄,英雄具有一些行为:
class Hero {
protected $behavior = [];
public function show()
{
var_dump($this->behavior);
}
}
然后定义一种名为攻击行为:
class Attack {
protected $value = 0;
public function __construct($value)
{
$this->value = $value;
}
}
改造一下英雄类,让英雄在出生的时候具有攻击行为:
class Hero {
protected $behavior = [];
public function __construct()
{
array_push($this->behavior, new Attack(10));
}
public function show()
{
var_dump($this->behavior);
}
}
这样,英雄和某个具体的行为就产生了一种依赖关系。
随着英雄的成长,英雄学会了越来越多的行为:
class Defend {
protected $value = 0;
public function __construct($value){}
}
class Move {
protected $speed;
public function __construct($speed){}
}
class Skill1 {
protected $name = '暴击';
public function __construct(){}
}
class Skill2 {
protected $name = '眩晕';
public function __construct(){}
}
改造一下英雄类,让英雄在出生的时候具有这些行为:
class Hero {
protected $behavior = [];
public function __construct()
{
array_push($this->behavior, new Attack(10));
array_push($this->behavior, new Defend(5));
array_push($this->behavior, new Move(30));
array_push($this->behavior, new Skill1());
array_push($this->behavior, new Skill2());
}
public function show()
{
var_dump($this->behavior);
}
}
随着行为的增加,暴露出了几个问题:
定义一个行为工厂,英雄出生时可以在行为工厂中挑选行为:
class BehaviorFactory
{
public function makeBehavior($behaviorName, $options=[])
{
switch ($behaviorName) {
case 'Attack': return new Attack($options[0]);
case 'Defend': return new Defend($options[0]);
case 'Move': return new Move($options[0]);
case 'Skill1': return new Skill1();
case 'Skill2': return new Skill2();
}
}
}
修改英雄类,让英雄可以去工厂中学习行为:
class Hero
{
protected $behavior = [];
public function __construct(array $behaviors)
{
// 初始化工厂
$factory = new BehaviorFactory();
// 通过工厂提供的方法制造需要的模块
foreach ($behaviors as $behaviorName => $behaviorOptions) {
$this->behavior[] = $factory->makeBehavior($behaviorName, $behaviorOptions);
}
}
}
$hero = new Hero([
'Attack' => [10],
'Defend' => [5],
'Move' => [30],
'Skill1' => [],
]);
引入工厂模式,我们解决了上述的两个问题:
但同时我们也引入了一个新的问题,每增加一种行为,就需要在工厂中增加一条生产线。
后面,我们将讲解如果使用一个更高级的工厂-服务容器来解决工厂模式存在的问题。
原文链接:https://www.cnblogs.com/danhuang/p/13189374.html
作者:肚子里的大哥
链接:http://www.phpheidong.com/blog/article/3351/cb3bed9e62e87477db96/
来源:php黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 php黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-4
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!