PHP面向对象中的聚合和组合

PHP面向对象中的聚合和组合 对象之间进行交互主要有三种:继承,聚合,组合,继承大家都很熟悉,这里就不具体介绍了,本文主要介绍聚合和组合的一些内容。 聚合:可以理解成第二个对象通过第一个对象的某个方法传递给第一个对象,然后第二个对象就可以调用第一个对象的方法,第二个对象可以根据自己的目的使用第二个对象的功能; 组合:用于描述一个对象完全拥有另一个对象的情况,即第一个对象中实例化第二个对象,该方式最常用语,第一个对象唯一需要使用第二个对象。 该段代码演示聚合和组合 work.class.php(该文件同样被组合的例子使用)

<?php class Work { //声明两个属性 工作状态,和薪水 private $state; private $salary; //构造方法 public function __construct($state,$salary){ $this-> state=$state; $this-> salary=$salary; } //获取属性信息的函数 public function getInfo() { return $this-> state.$this->salary; } } ?>

life.class.php

<?php //引入work类文件 require_once("work.class.php"); //定义Life 类文件 class Life { //声明属性 private $lifeWork; private $owner; private $liftZuhe; //构造函数 public function __construct($owner){ $this->owner=$owner; } //采用对象聚合的方式,将对象作为一个参数赋值给成员属性 public function addWorkToLife(Work $work) { $this->lifeWork[]= $work; } //显示所有的工作信息 public function displayWorks() { $workInfo="Juhe | ".$this->owner; //调用循环输出信息 foreach($this->lifeWork as $work) { $workInfo.= ' ' . $work->getInfo() ; } //返回结果值 return $workInfo; } //采用对象组合的方式,将对象直接实例化在方法内部 function showWorkLife() { $this->lifeZuhe = new work('xiaozhe',666); $returnValue = 'Zuhe | '.$this->owner.' | '.$this->lifeZuhe->getInfo() . '<br/>'; return $returnValue; } } //实例化一个Life对象 $life=new Life("Andy"); 组合 echo $life->showWorkLife(); //聚合 //实例化两个Work对象 $work1=new Work('past',15); $work2=new Work("now",30); //调用life对象的addWorkToLife方法,添加Work对象 $life->addWorkToLife($work1); $life->addWorkToLife($work2); echo $life->displayWorks(); ?>

聚合与组合的比较: 1.何时使用聚合还是组合,通过回答“如果对象A消亡后,对象B还会存在吗?”,如果对象B在对象A消亡后继续存在,对象A应聚合对象B。但是当对象B和A一同消亡时,对象A应该组合对象B。当然还可以从对象B是否唯一被对象A所需要的情况。 2.聚合比组合管理负担小,因为在聚合中一个对象可以被其他多个对象共享。将数据库连接类进行聚合确实很不错。而组合数据库连接类会因为流量高而变慢。 3.组合使得类更容易使用。 4.聚合的问题,共享已聚合对象的某个对象可能会改变已聚合对象的状态,导致该对象无法在被希望使用它的其他类使用 5.组合会造成两个对象之间出现高度耦合,导致依赖性很高,这违背模块设计中的“高内聚,低耦合”的原则,使得重用更加困难。 6.泛化:来描述继承关系(一条实线加空心闭合箭头标识) 7.UML用“实现” 来描述接口和实现接口的类之间的关系(一条虚线加空心闭合箭头标识) 8.关联:当一个类的属性保存了对别一个类的一个实例(或多个实例)的引用(一条直线) 可以用箭头来描述关联的方向(单向关联,双向关联) 9.联合和组合都描述了一个类长期持有其他类的一个或多个实例的情况,通过联合和组合,被引用的对象实例成为引用对象的一部分 10.在联合的情况下,被包含对象是容器的一个核心部分,但是它们也可以同时被其他对象所包含.联合关系用一条以空心菱形开头的线来说明 11.组合则是一个更强的关系。在组合中,被包含对象只能被它的容器所引用。当容器被删除时,它也应该被删除。一条以实心菱形开头的线来说明

转载于:https://my.oschina.net/u/868897/blog/529233

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值