加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

关于对聚合和组合的理解

发布时间:2020-12-13 22:46:19 所属栏目:百科 来源:网络整理
导读:今天看了看 深入PHP++面向对象、模式与实践_第三版 其中看到“聚合”跟“组合”的概念,对此理解也比较模糊 文中是这样说的: 理解上面文本中的话,我个人理解是成这样: 首先是聚合 ?php/** * Created by PhpStorm. * ClassName: AggregationA * User: JAN

今天看了看

深入PHP++面向对象、模式与实践_第三版

其中看到“聚合”跟“组合”的概念,对此理解也比较模糊
文中是这样说的:


理解上面文本中的话,我个人理解是成这样:

首先是聚合

<?php
/**
 * Created by PhpStorm.
 * ClassName: AggregationA
 * User: JAN
 * Date: 14-9-12
 * Time: 下午12:18
 * Link: http://blog.segmentfault.com/janhuang
 */

namespace DesignPatternSimpleExampleAggregation;

class AggregationA
{
    protected $aggregation = array();

    public function __construct()
    {
        array_push($this->aggregation,new AggregationB());
        array_push($this->aggregation,new AggregationC());
    }

    public function addAggregation(AggregationInterface $aggregation)
    {
        array_push($this->aggregation,$aggregation);

        return $this;
    }

    public function getAggregationList()
    {
        return $this->aggregation;
    }
}
<?php
/**
 * Created by PhpStorm.
 * ClassName: AggregationB
 * User: JAN
 * Date: 14-9-12
 * Time: 下午12:18
 * Link: http://blog.segmentfault.com/janhuang
 */

namespace DesignPatternSimpleExampleAggregation;

class AggregationB implements AggregationInterface
{
    public function getName()
    {
        return $this;
    }
}
<?php
/**
 * Created by PhpStorm.
 * ClassName: AggregationC
 * User: JAN
 * Date: 14-9-12
 * Time: 下午2:34
 * Link: http://blog.segmentfault.com/janhuang
 */

namespace DesignPatternSimpleExampleAggregation;

class AggregationC implements AggregationInterface
{
    public function getName()
    {
        return $this;
    }
}
<?php
/**
 * Created by PhpStorm.
 * ClassName: AggregationInterface
 * User: JAN
 * Date: 14-9-12
 * Time: 下午2:38
 * Link: http://blog.segmentfault.com/janhuang
 */

namespace DesignPatternSimpleExampleAggregation;

interface AggregationInterface
{
    public function getName();
}

类内聚了两个类:分别是agregationB,agregationC 分别都实现了AgregationInterface,而且在实力AgregationA的时候构造时实例化B和C。

再次是组合:

A类

<?php
/**
 * Created by PhpStorm.
 * ClassName: CompositionA
 * User: JAN
 * Date: 14-9-12
 * Time: 下午12:25
 * Link: http://blog.segmentfault.com/janhuang
 */

namespace DesignPatternSimpleExampleComposition;

class CompositionA
{
    private $compositionB = null;

    private $compositionC = null;

    public function setCompositionB(CompositionB $compositionB)
    {
        $this->compositionB = $compositionB;

        return $this;
    }

    public function getCompositionB()
    {
        return $this->compositionB;
    }

    public function setCompositionC(CompositionC $compositionC)
    {
        $this->compositionC = $compositionC;

        return $this;
    }

    public function getCompositionC()
    {
        return $this->compositionC;
    }
}

B类

<?php
/**
 * Created by PhpStorm.
 * ClassName: CompositionB
 * User: JAN
 * Date: 14-9-12
 * Time: 下午12:25
 * Link: http://blog.segmentfault.com/janhuang
 */

namespace DesignPatternSimpleExampleComposition;

class CompositionB implements CompositionObjectInterface
{
    public function getName()
    {
        return $this;
    }
}

C类

<?php
/**
 * Created by PhpStorm.
 * ClassName: CompositionC
 * User: JAN
 * Date: 14-9-12
 * Time: 下午2:42
 * Link: http://blog.segmentfault.com/janhuang
 */

namespace DesignPatternSimpleExampleComposition;

class CompositionC implements CompositionObjectInterface
{
    public function getName()
    {
        return $this;
    }
}

接口

<?php
/**
 * Created by PhpStorm.
 * ClassName: CompositionObjectInterface
 * User: JAN
 * Date: 14-9-12
 * Time: 下午12:29
 * Link: http://blog.segmentfault.com/janhuang
 */

namespace DesignPatternSimpleExampleComposition;

interface CompositionObjectInterface
{
    public function getName();
}

在实例化CompositionA 的时候并不会直接实例化其他类,这里只是清楚限定了CompositionB类作为参数类型传入setCompotionB方法,这里理解的组合就是:有提供组合的方法提供外界指定的类进行自由组合,并且使用组合当中的方法。

以上仅是个人的理解,不知道这对类的关系有没有帮助,最近在学习设计模式,概念有点模糊,还请各路英雄指点。感谢

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读