组合模式

目录 设计模式

组合模式属于结构型模式
概述:将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
组合和聚合都描述一个类长期持有其他类的一个或多个实例的情况。
聚合:被包含对象是容器的核心部分,但是他们也可以被其他对象所包含。聚合关系用一条以空心菱形开头的线来说明。
组合:被包含的对象只能被它的容器所引用。当容器被删除时,它也应该被删除。组合关系的菱形是实心的

<?php 
/**
 * 执行单元
 */
abstract class Unit{
    
    public function bombardStrength();
    
}
<?php 
/**
 * 弓箭手
 */
class ArcherUnit extends Unit{
    
    public function bombardStrength(){
        
        return 4;
    }
}
<?php 
/**
 * 激光大炮
 */
class LaserCannonUnit extends Unit{
    
    public function bombardStrength(){
        
        return 10;
    }
}
<?php 
/**
 * 军队
 */
class Arm{
    
    private $units = array();
    private $strength = 0;
    public function addUnit(Unit $unit){
        
        array_push($this->units, $unit);
        
    }
    
    public function bombardStrength(){
        
        foreach ($this->units as $unit){
            
            $this->strength += $unit->bombardStrength();
        }
        
    }
}
<?php
 /**
 * 组合模式
 */
public function actionCombine(){
    
    $archer = new ArcherUnit;
    $laserCannon = new LaserCannonUnit;
    
    $arm = new Arm;
    $arm->addUnit($archer);
    $arm->addUnit($laserCannon);
    
    echo $arm->bombardStrength();
}

暂无评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注