• 组合模式


    面向对象中,有一个原则是:  组合优于继承的原则

    今天学习了组合模式,做一个小总结。

    组合模式的应用场景:
    把整体和局部的关系用树形结构表示,从而客户端能够把一个一个的局部对象和由局部对象组合的整体对象采用同样的方法来对待;

    组合模式的应用实例:

    <?php
    /**
     *  单元抽象类
     *  author caoxin 2014.7.18
     */
    abstract class Unit
    {
        /**
         * 作战能力
         */
        abstract public  function bomboardStrength();
          
    }
    
    
    
    /**
     *  弓箭手 
     *  author caoxin 2014.7.18
     */
    class Archer extends Unit 
    {
        /**
         * 作战能力
         */
        public  function bomboardStrength(){
            return 4;
            
        }
          
    }
    
    /**
     *  大炮 
     *  author caoxin 2014.7.18
     */
    class  LaserCanonUnit extends Unit 
    {
        /**
         * 作战能力
         */
        public  function bomboardStrength(){
            return 40;
            
        }
          
    }
    
    
    /**
     * 军队
     * author caoxin 2014.7.18
     */
    
    class Army
    {
        /**
         * 存储作战单元的数组
         * @var array
         */
        private $_units = array();
    
        /**
         * 添加作战单元
         */
        public function addUnit(Unit $unit){
            array_push($this->_units,$unit);
            
        }
    
       /**
        * 综合的作战能力
        */
        public function bomboardStrength(){
            $strength = 0;
            if(!empty($this->_units)){
                foreach( $this -> _units as $unit){
                    $strength += $unit ->bomboardStrength();
                }
            }
            return $strength ;
        }
    
    
        
    }
    
    
    $army = new Army();
    $army -> addUnit(new Archer() );
    $army -> addUnit( new LaserCanonUnit());
    $strengths = $army ->bomboardStrength();
    echo $strengths;
    
    ?>

    组合模式的优点:
    能够灵活的组合局部对象和整体对象之间的关心,对客户端来说,局部对象和整体对象的调用没有差别,使调用简单。

    组合模式的缺点:
    1)组合操作的成本很高,如果一个对象树中有很多子对象,可能一个简单的调用就可能使系统崩溃;
    2)对象持久化的问题,组合模式是树形结构,不能很好地在关系数据库中保存数据,但是却非常适合用于xml持久化;

  • 相关阅读:
    电路中的保险丝选择
    EXCEL使用自动换行后,行高在预览和打印字符不全(转载)
    PCB阻抗受控的通孔之设计(转载)
    PCB的阻抗控制
    关于Altera LVDS 经验分享
    在FPGA中实现源同步LVDS接收正确字对齐
    Altera 速度等级
    LVDS原理及设计指南--以及衍生的B-LVDS-M-LVDS--CML-LVPECL电平等
    Bayer图像处理
    Image Signal Processor
  • 原文地址:https://www.cnblogs.com/mingaixin/p/3853637.html
Copyright © 2020-2023  润新知