[php] 设计模式之 组合模式
2016-09-01 01:39
513 查看
<?php //组合模式 //用军队兵力 来说明这个模式 header('Content-type:text/html; charset=utf-8'); //人类 abstract class Human { abstract function getAttack(); } //士兵类 class Soldiers extends Human { private $units = array(); //攻击力 protected $attack = 0; //得到总兵力 public function getAttack(){ $sum = 0; foreach($this->units as $v){ $sum += $v->attack; } return '总兵力'.$sum.'<br/>'; } //获得集合 public function getUnits(){ return $this->units; } //增加兵种 public function addspecies(Soldiers $soldiers){ if(in_array($soldiers, $this->units, true)){ return; } $this->units[] = $soldiers; } //减少兵种 public function delspecies(Soldiers $soldiers){ $units = array(); foreach($this->units as $val){ if($val instanceof $soldiers){ continue; }else{ $units[] = $val; } } $this->units = $units; } } //炮兵类 class Artillery extends Soldiers { public function __construct($val = 0){ $this->attack = $val; } } //步兵类 class Infantry extends Soldiers { public function __construct($val = 0){ $this->attack = $val; } } //集团 class Group extends Soldiers { public function __construct($val = 0){ $this->attack = $val; } } //集团军1 $t = new Group(); $t->addspecies(new Artillery(10)); $t->addspecies(new Infantry(12)); echo '增加两个兵种后'.$t->getAttack(); $t->delspecies(new Infantry(2)); echo '删除一个兵种后'.$t->getAttack(); //集团军2 $t1 = new Group(); $t1->addspecies(new Infantry(30)); echo '集团军2'.$t1->getAttack(); //合并集团军1,2 foreach($t1->getUnits() as $k){ $t->addspecies($k); } echo '合并集团军1,2后'.$t->getAttack(); ?>
相关文章推荐
- [php] 设计模式之 单例模式
- Laravel安装后访问空白
- PHP数组编码gbk与utf8互相转换的两种方法
- PHP编码规范说明
- 基于LNMP的Zabbbix之PHP源码安装
- PHP date()函数参数详解
- Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试
- php 用 curl提交json数据
- 深入理解Yii2.0 (3)行为(Behavior)
- 定制自己的PHP语法-在PHP中实现unless
- PHP 对象 魔术方法
- php --with-mysql=mysqlnd
- 基于rtp的h264流媒体的传输机制和实现
- 【PHP】对象的复制(拷贝)与__clone()方法
- php如何处理高并发(目录)
- Laravel详细安装记录,安装laravel遇到的坑
- PHP去除字符串开头或末尾逗号
- 在php中定义常量时,const与define的区别
- PHP内置扩展列表
- Laravel SQL查询中first, pluck与lists方法的使用