我是靠谱客的博主 纯情香菇,最近开发中收集的这篇文章主要介绍php 对象组合,PHP设计模式-组合,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

适用性

定义:将对象以树形结构组织起来,以达成“部分-整体”的层次结构,使得客户端对单个对象和组合对象的使用具有一致性

我的理解:把对象构建成树形结构

代码示例

/**

* 根节点和树节点都要实现的接口

*/

interface CompositeInterface

{

/**

* 增加一个节点对象

*

* @return mixed

*/

public function add(CompositeInterface $composite);

/**

* 删除节点一个对象

*

* @return mixed

*/

public function delete(CompositeInterface $composite);

/**

* 实体类要实现的方法

*

* @return mixed

*/

public function operation();

/**

* 打印对象组合

*

* @return mixed

*/

public function printComposite();

}

/**

* 文件实体.

*/

class File implements CompositeInterface

{

/**

* 文件名称.

*

* @var string

*/

private $_name = '';

/**

* 文件内容.

*

* @var string

*/

private $_content = '';

/**

* 构造函数.

*

* @param string $name

*/

public function __construct($name = '')

{

$this->_name = $name;

}

/**

* 魔法函数

* @param  string $name  属性名称

* @return mixed

*/

public function __get($name='')

{

$name = '_' . $name;

return $this->$name;

}

/**

* 增加一个节点对象

*

* @return mixed

*/

public function add(CompositeInterface $composite)

{

throw new Exception('not support', 500);

}

/**

* 删除节点一个对象

*

* @return mixed

*/

public function delete(CompositeInterface $composite)

{

throw new Exception('not support', 500);

}

/**

* 打印对象组合.

*

* @return mixed

*/

public function printComposite()

{

throw new Exception('not support', 500);

}

/**

* 实体类要实现的方法.

*

* @return mixed

*/

public function operation($operation = '', $content = '')

{

switch ($operation) {

case 'write':

$this->_content .= $content;

echo 'write success';

break;

case 'read':

echo $this->_content;

break;

default:

throw new Exception("not support", 400);

break;

}

}

}

/**

* 文件夹实体

*/

class Folder implements CompositeInterface

{

/**

* 对象组合

* @var array

*/

private $_composite = [];

/**

* 文件夹名称

* @var string

*/

private $_name = '';

/**

* 构造函数

*

* @param string $name

*/

public function __construct($name='')

{

$this->_name = $name;

}

/**

* 魔法函数

* @param  string $name  属性名称

* @return mixed

*/

public function __get($name='')

{

$name = '_' . $name;

return $this->$name;

}

/**

* 增加一个节点对象

*

* @return void

*/

public function add(CompositeInterface $composite)

{

if (in_array($composite, $this->_composite, true)) {

return;

}

$this->_composite[] = $composite;

}

/**

* 删除节点一个对象

*

* @return void

*/

public function delete(CompositeInterface $composite)

{

$key = array_search($composite, $this->_composite, true);

if (!$key) {

throw new Exception("not found", 404);

}

unset($this->_composite[$key]);

$this->_composite = array_values($this->_composite);

}

/**

* 打印对象组合

*

* @return void

*/

public function printComposite()

{

foreach ($this->_composite as $v) {

if ($v instanceof Folder) {

echo '---' . $v->name . "---n";

$v->printComposite();

continue;

}

echo $v->name . "n";

}

}

/**

* 实体类要实现的方法

*

* @return mixed

*/

public function operation()

{

return;

}

}

try {

// 构建一个根目录

$root = new Folder('根目录');

// 根目录下添加一个test.php的文件和usr,mnt的文件夹

$testFile = new File('test.php');

$usr = new Folder('usr');

$mnt = new Folder('mnt');

$root->add($testFile);

$root->add($usr);

$root->add($mnt);

$usr->add($testFile);// usr目录下加一个test.php的文件

// 打印根目录文件夹节点

$root->printComposite();

} catch (Exception $e) {

echo $e->getMessage();

}

最后

以上就是纯情香菇为你收集整理的php 对象组合,PHP设计模式-组合的全部内容,希望文章能够帮你解决php 对象组合,PHP设计模式-组合所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部