Symfony2面向对象设计
我面临一个面向对象的设计问题。。。我的目标是建立一个改进系统。 理解起来非常简单,下面是代码示例:Symfony2面向对象设计,symfony,oop,Symfony,Oop,我面临一个面向对象的设计问题。。。我的目标是建立一个改进系统。 理解起来非常简单,下面是代码示例: <?php interface Improvement { public function getGains(); public function isActivated(); } // tagged "improvement" class AImprovement implements Improvement { public function getGai
<?php
interface Improvement {
public function getGains();
public function isActivated();
}
// tagged "improvement"
class AImprovement implements Improvement {
public function getGains() {
return 1;
}
public function isActivated() {
return true;
}
}
// tagged "improvement"
class BImprovement implements Improvement {
private $statsCenter;
public function __construct(StatsCenter $statsCenter) {
$this->statsCenter = $statsCenter;
}
public function getGains() {
return 10;
}
public function isActivated() {
return $statsCenter->getStats()['totalGains'] > 10;
}
}
class ImprovementCenter {
private $improvements;
public function addImprovement(Improvement $improvement) {
$this->improvements[] = $improvement;
}
public funtion getGainsSum() {
$s = 0;
foreach ($this->improvements as $improvement) {
$s += $improvement->getGains();
}
return $s;
}
}
class StatsCenter {
private $improvementCenter;
public function __construct(ImprovementCenter $improvementCenter) {
$this->improvementCenter = $improvementCenter;
}
public function getStats() {
return [
'totalGains' => Money::toEUR($this->improvementCenter->getGainsSum())
];
}
}
我认为消除循环引用的唯一方法是使改进依赖于顺序。通过这种方式,我将使用装饰器模式进行改进,并根据以前的改进做出所有决策。使用这种方法,类improvementcenter将不再存在,StatScenter可以在getstats中得到改进。我看到的消除循环引用的唯一方法是使改进依赖于顺序。通过这种方式,我将使用装饰器模式进行改进,并根据以前的改进做出所有决策。使用这种方法,类improvementcenter将不再存在,并且Statister可以在getstats中得到改进。