PHP组合模式第一种实现方式

黄舟
发布: 2023-03-06 16:34:01
原创
1086 人浏览过

PHP组合模式第一种实现方式

<?php
// 组合模式

function echoLine($msg) {
	echo $smg, &#39;<br/>&#39;;
}

interface Component
{
	public function doAction();
}

/**
 * 局部类
 */
class Leaf implements Component
{
	public function doAction()
	{
		echoLine(&#39;The [leaf] doAction!&#39;);
	}
}

/**
 * 组合模式的一个问题是如何实现 add 和 remove 方法。一般的组合模式会在抽象超类中添加 add
 * 和 remove 方法。这可以确保模式中的所有类都共享同一个借口,但这同时也意味着局部类也必须
 * 实现这些方法。实际上,我们并不希望在局部类中实现这些方法。
 *
 * 需要担心的问题:
 * 1. 组合操作的成本。
 * 2. 对象持久化问题。难以直接将数据保存在关系型数据中,但其数据却非常适合持久化为 XML。
 */
class Composite implements Component
{
	/**
	 * component container
	 */
	private $container = array();

	public function doAction()
	{
		echoLine(&#39;The [Composite] doAction!&#39;);
		foreach ($this->container as $c)
			$c->doAction();
	}

	/**
	 * add component
	 * @param Component $c
	 */
	public function addComponent(Component $c)
	{
		if(!in_array($c, $this->container, true))
			$this->container[] = $c;
	}

	/**
	 * remove conponent
	 * @param  Component $c
	 */
	public function removeComponent(Component $c)
	{
		$this->container = array_diff($this->container, array($c));
	}

	/**
	 * get all components
	 * @return array
	 */
	public function getComponents()
	{
		return $this->container;
	}
}

// test code
$leaf = new Leaf();
$composite = new Composite();
$composite->addComponent($leaf);
$composite->addComponent(new Leaf());
$composite->addComponent(new Leaf());

$composite->doAction();
登录后复制

以上是PHP组合模式第一种实现方式的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!