Heim >Backend-Entwicklung >PHP-Tutorial >Die erste Implementierung des PHP-Kombinationsmodus

Die erste Implementierung des PHP-Kombinationsmodus

黄舟
黄舟Original
2017-03-15 09:44:091110Durchsuche

PHPKombinierter ModusDie erste Implementierungsmethode

<?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();

Das obige ist der detaillierte Inhalt vonDie erste Implementierung des PHP-Kombinationsmodus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn