php 组合模式

/*
 组合和聚合都描述了一个类长期持有其他类的一个或多个实例的情况。
 聚合:被包含对象是容器的核心部分,但是他们也可以被其他对象所包含。聚合关系用一条以空心菱形开头的线来说明。
 组合:被包含的对象只能被它的容器所引用。当容器被删除时,它也应该被删除。组合关系的菱形是实心的。
 */


/**
 *单元抽象类
 *@author li.yonghuan
 *@version 2014.01.15
 */
abstract class Unit{
    /**
     *作战能力
     *
     */
    abstract function bombardStrength();
}


/**
 *弓箭手
 *@author li.yonghuan
 *@version 2014.01.15
 *
 */
class Archer extends Unit{
    /**
     *作战能力
     *
     */
    public function bombardStrength(){
        return '4';
    }
}

/**
 *激光大炮单元
 *@author li.yonghuan
 *@version 2014.01.15
 */
class laserCannonUnit extends Unit{
    /**
     *作战能力
     *
     */
    public function bombardStrength(){
        return '42';
    }
}

/**
 *军队
 *@author li.yonghuan
 *@version 2014.01.15
 */
class Arm{
    /**
     *存储作战单元的数组
     *@var array
     */
    private $units = array();

    /**
     *添加单元
     *@param Unit object
     */
    public function addUnit( Unit $unit ){
       array_push( $this->units, $unit );
    }

    /**
     *作战能力
     *
     */
    public function bombardStrength(){
        $strength = 0;
        foreach( $this->units as $unit ){
            $strength += $unit->bombardStrength();
        }
        return $strength;
    }
}


$archer = new Archer();
$laserCannon = new laserCannonUnit();

$arm = new Arm();
$arm->addUnit( $archer );
$arm->addUnit( $laserCannon );

echo $arm->bombardStrength();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值