我有一个很长的播放列表"类;具有处理播放列表缓存,变量和预设等功能。
class Playlist{
var $cache;
var $variables;
var $preset;
function __construct(){
$this->cache = populate_cache();
$this->variables = $this->populate_variables();
$this->preset = $this->populate_preset();
}
function populate_cache(){
}
function populate_variables(){
}
function populate_preset(){
}
}
由于它变得非常难以阅读(与缓存,变量,预设有关的东西的许多功能),我开始将它分成几个类(代码在这里减少):
class Playlist{
var $cache;
var $variables;
var $presets;
function __construct(){
$this->cache = new PlaylistCache($this);
$this->variables = new PlaylistVariables($this);
$this->presets = new PlaylistPreset($this);
}
}
class PlaylistCache{
var $playlist;
function __construct(&$playlist){
$this->playlist = $playlist;
}
}
class PlaylistVariables{
var $playlist;
function __construct(&$playlist){
$this->playlist = $playlist;
}
}
class PlaylistPreset{
var $playlist;
function __construct(&$playlist){
$this->playlist = $playlist;
}
}
因此播放列表对象被传递给每个"子类"。如果我很好理解,这称为Dependency Injection。
,我不确定这是非常聪明的但我需要能够通过每个子类访问整个播放列表对象,这是我目前找到的唯一方法。
我已经知道extending classes,但我不想在这里扩展我的课程:缓存,变量和预设不是一种不同的播放列表,它们是"属性"我的播放列表需要填充。
我挖了一下并阅读了Abstract Classes,Traits,Interfaces,我想我的解决方案就在那里。但我找不到哪里,我很难理解,因为它真的很抽象,英语不是我的第一语言。
所以:有人看到我的意思并有建议吗? 谢谢!
答案 0 :(得分:0)
有些评论具有误导性。 "孩子"类使用依赖注入而不是继承父/子关系。但是,播放列表(父)类确实使用了合成。
构造函数中的&&#;; passing by reference'。要按值传递,该类需要accessor methods。如果您只想要一个说...当前播放列表的实例,singleton是有意义的。 Traits是一个复制粘贴解决方案 - 单例模式的设计可以放在一个特征中,但不能使用单例。
考虑播放列表中实际需要的播放列表*类,并考虑明确传递这些值。