日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

php 组合模式,php设计模式(十三)透明组合模式

發(fā)布時(shí)間:2024/9/19 php 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php 组合模式,php设计模式(十三)透明组合模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

組合模式用來解決整體和部分可以一致對待的問題;

比如說 文件夾 和其下的 文件;

可以復(fù)制文件也可以復(fù)制整個文件夾;

組合模式是將對象組合成樹形結(jié)構(gòu)以表示整體和部分的層次結(jié)構(gòu);

可以方便的增加節(jié)點(diǎn);

組合模式分為兩種;透明模式

安全模式

我們先來說透明組合模式;

結(jié)構(gòu)

Component:包含樹枝節(jié)點(diǎn)和葉子節(jié)點(diǎn)方法的抽象類

Composite:樹枝節(jié)點(diǎn) 有子節(jié)點(diǎn) 示例中指 Dir 文件夾

Leaf:葉子節(jié)點(diǎn) 沒有子節(jié)點(diǎn) 示例中指 File 文件

示例

包含樹枝節(jié)點(diǎn)和葉子節(jié)點(diǎn)方法的抽象類

Component.php<?php

namespace Baijunyao\DesignPatterns\SafeComposite;

/**

* 包含樹枝節(jié)點(diǎn)和葉子節(jié)點(diǎn)方法的抽象類

*

* Class Component

* @package Baijunyao\DesignPatterns\SafeComposite

*/

abstract class Component

{

/**

* @var

*/

protected $name;

/**

* Component constructor.

* @param $name

*/

public function __construct($name)

{

$this->name = $name;

}

/**

* @return mixed

*/

abstract public function display();

}

文件夾

Dir.php<?php

namespace Baijunyao\DesignPatterns\SafeComposite;

/**

* 文件夾

*

* Class Dir

* @package Baijunyao\DesignPatterns\SafeComposite

*/

class Dir extends Component

{

/**

* @var array

*/

protected $children = [];

/**

* 添加子節(jié)點(diǎn)

*

* @param Component $component

*/

public function add(Component $component)

{

$this->children[] = $component;

}

/**

* @return mixed|string

*/

public function display()

{

$nameStr = $this->name .'
';

foreach ($this->children as $k => $v) {

$nameStr .= '--' . $v->display();

}

return $nameStr;

}

}

文件

File.php<?php

namespace Baijunyao\DesignPatterns\SafeComposite;

/**

* 文件

*

* Class File

* @package Baijunyao\DesignPatterns\SafeComposite

*/

class File extends Component

{

/**

* @param Component $component

* @throws \Exception

*/

public function add(Component $component)

{

throw new \Exception('文件不能添加子節(jié)點(diǎn)');

}

/**

* @return mixed|string

*/

public function display()

{

return '--' . $this->name .'
';

}

}

運(yùn)行;

index.php<?php

namespace Baijunyao\DesignPatterns\SafeComposite;

require __DIR__.'/../vendor/autoload.php';

/**

* 客戶端

*

* Class Client

* @package Baijunyao\DesignPatterns\SafeComposite

*/

class Client

{

/**

* 運(yùn)行

*/

public function run()

{

$designPatterns = new Dir('design-patterns');

$classAdapter = new Dir('ClassAdapter');

$objectAdapter = new Dir('ObjectAdapter');

$safeComposite = new Dir('SafeComposite');

$designPatterns->add($classAdapter);

$designPatterns->add($objectAdapter);

$designPatterns->add($safeComposite);

$componentFile = new File('Component.php');

$dirFile = new File('Dir.php');

$fileFile = new File('File.php');

$indexFile = new File('index.php');

$safeComposite->add($componentFile);

$safeComposite->add($dirFile);

$safeComposite->add($fileFile);

$safeComposite->add($indexFile);

echo $designPatterns->display();

}

}

$client = new Client();

$client->run();

運(yùn)行結(jié)果是這個樣子的;

我們看一眼 UML ;

再回頭看下 File.php ;

File 作為葉子其下是不能再有子節(jié)點(diǎn)的;

但是為了讓樹枝節(jié)點(diǎn)和葉子能有一個統(tǒng)一的操作;

我們在抽象類 Component.php 中定義了 add 方法;

作為示例為了簡化只寫了個 add 配套的 remove 等都沒寫;

這種方式是透明了卻不安全;

我們又不得不在 File 的 add 方法中拋出錯誤;

總結(jié)

以上是生活随笔為你收集整理的php 组合模式,php设计模式(十三)透明组合模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。