php設計模式之 裝飾者模式

2022-05-04 17:00:09 字數 1733 閱讀 7538

beverage.php

<?php

namespace designpattern;

abstract class beverage

/*** @param string $name

* @return beverage

*/public function setname(string $name): beverage

/*** @return float

*/public abstract function getcost(): float;

/*** beverage constructor.

*/public function __construct()

}

bluemountaincoffee.php

<?php

namespace designpattern;

/** * 藍山咖啡

*/class bluemountaincoffee extends beverage

}

cubitacoffee.php

<?php

namespace designpattern;

/** * 琥爵咖啡

*/class cubitacoffee extends beverage

}

coffeedecorator.php

<?php

namespace designpattern;

abstract class coffeedecorator extends beverage

}

milkdecorator.php

<?php

namespace designpattern;

class milkdecorator extends coffeedecorator

}

sugardecorator.php

<?php

namespace designpattern;

class sugardecorator extends coffeedecorator

}

最終呼叫:

$coffee = new \designpattern\bluemountaincoffee();//生成一杯藍山咖啡

$beverage = new \designpattern\milkdecorator($coffee);//給藍山咖啡加乙份牛奶

$beverage = new \designpattern\milkdecorator($beverage);//給藍山咖啡再加乙份牛奶

$beverage = new \designpattern\sugardecorator($beverage);//給藍山咖啡加乙份糖

$beverage = new \designpattern\sugardecorator($beverage);//給藍山咖啡再加乙份糖

$beverage = new \designpattern\sugardecorator($beverage);//給藍山咖啡再加乙份糖

var_dump($beverage->getcost());

程式執行結果:

float(26.6)

PHP設計模式之裝飾者模式

裝飾者模式動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。abstract class beverage 被裝飾者類 class coffee extends beverage public function cost 以下三個類是裝飾者相關類 class cond...

PHP設計模式之裝飾者模式

php設計模式之裝飾者模式 介紹 裝飾者模式動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。思維導圖 有這樣乙個專案,做乙個餐廳訂餐系統。起初的 結構是這樣的。前面有很多beverage的繼承類,現在遇到的問題是牛奶的價錢 了,那麼所有相關的類,我們都要進行調整,比...

設計模式之 裝飾者模式

一 裝飾者模式 裝飾者模式又稱為包裝模式。動態地給乙個物件增加新的職責。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。裝飾者模式顧名思義就是對乙個物件進行裝飾,具體怎樣裝飾呢?那就是給這個物件不斷的增加職責方法。給乙個物件增加方法不簡單啊,用繼承或者直接在物件的類中增加方法。如果我們要對自...