裝飾模式: 顧名思義,裝飾模式是一種對對象數據的屢次過濾,就像裝飾同樣, 一層層的修飾, 獲取滿意的結果。 裝飾模式共分爲兩個部分: 1: 裝飾者: 在這個接口接口下面的類和方法用以對數據進行修飾(即對數據進行過濾修改) 2: 被裝飾者: 這個就是要被過濾的數據接口對象
炒菜以前要對買來的菜進行揀菜, 洗菜等操做。這個就相似於裝飾操做, 裝飾者就是洗淨的過程操做, 被裝飾者就是菜。
//裝飾者 abstract class Decorator { //裝飾操做 abstract function process(Cai $cai); } class XiCai extends Decorator { public function process(Cai $cai) { echo '這是個洗菜操做。<br />'; } } //被裝飾者 abstract class Cai { abstract function getGanJingZhi(); } //青菜 class QingCai extends Cai { public function getGanJingZhi() { return 2; } } //白菜 class BaiCai extends Cai { public function getGanJingZhi() { return 3; } } //讓已經裝飾的裝飾者再進行新的裝飾,表示多步過濾 abstract class DecorateActor extends Decorator { protected $decorator; public function __construct(Decorator $d) { $this->decorator = $d; } function process(Cai $cai) { $this->decorator->process($cai); } } //揀菜操做 class JianCai extends DecorateActor { public function process(Cai $cai) { echo '這是個揀菜操做。<br />'; parent::process($cai); //進行下一步過濾 } } //泡菜操做 class PaoCai extends DecorateActor { public function process(Cai $cai) { echo '這是個浸泡操做。<br />'; parent::process($cai); //進行下一步過濾 } } $cai = new QingCai(); $process = new JianCai(new PaoCai(new XiCai($cai))); $process->process($cai);
這是個揀菜操做。 這是個浸泡操做。 這是個洗菜操做。
總結: 當咱們須要對數據進行過濾的時候, 裝飾模式能夠成爲你的選擇this