ホームページ  >  記事  >  バックエンド開発  >  compose php デザインパターン 複合組み合わせパターン

compose php デザインパターン 複合組み合わせパターン

WBOY
WBOYオリジナル
2016-07-29 08:45:471242ブラウズ

复制代码代码如下:


/**
* 結合モード
*
* オブジェクトをツリー構造に結合して「部分全体」の階層を表すことで、顧客は単一オブジェクトと複合オブジェクトを一貫して使用できるようになります
*/
抽象クラスMenuComponent
{
public function add($component){}
public function Remove($component) {}
public function getName(){}
public function getUrl(){}
public function display(){}
}
class Menu extends MenuComponent
{
private $_items = array();
プライベート $_name = null;
パブリック関数 __construct($name)
{
$this->_name = $name;
}
パブリック関数 add($component)
{
$this->_items[] = $component;
}
パブリック関数 Remove($component)
{
$key = array_search($component,$this->_items);
if($key !== false) unset($this->_items[$key]);
}
public function display()
{
echo "-- ".$this->_name." ---------
";
foreach($this->_items as $item)
{
$item->display();
}
}
}
class 項目は MenuComponent を拡張します
{
private $_name = null;
プライベート $_url = null;
パブリック関数 __construct($name,$url)
{
$this->_name = $name;
$this->_url = $url;
}
public function display()
{
echo $this->_name."#".$this->_url."
";
}
}
クラスクライアント
{
private $_menu = null;
パブリック関数 __construct($menu)
{
$this->_menu = $menu;
}
パブリック関数 setMenu($menu)
{
$this->_menu = $menu;
}
パブリック関数displayMenu()
{
$this->_menu->display();
}
}
// 实例一下
// 创建menu
$subMenu1 = new Menu("sub menu1");
$subMenu2 = 新しいメニュー("サブメニュー2");
$subMenu3 = 新しいメニュー("サブメニュー3");
$item1 = 新しいアイテム("163","www.163.com");
$item2 = 新しいアイテム("sina","www.sina.com");
$subMenu1->add($item1);
$subMenu1->add($item2);
$item3 = 新しいアイテム("baidu","www.baidu.com");
$item4 = 新しいアイテム("google","www.google.com");
$subMenu2->add($item3);
$subMenu2->add($item4);
$allMenu = new Menu("すべてのメニュー");
$allMenu->add($subMenu1);
$allMenu->add($subMenu2);
$allMenu->add($subMenu3);
$objClient = 新しいクライアント($allMenu);
$objClient->displayMenu();
$objClient->setMenu($subMenu2);
$objClient->displayMenu();

上記は、compose php デザイン モードを介して作成された複合結合モードであり、compose 面の内容が含まれており、PHP 教則に関心のある友人の助けになることが望まれます。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。