1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
<?php class MilkTea { private $name = '奶茶'; private $price = 3; public function setName($prefix) { $this->name = $prefix . $this->name; } public function setPrice($price) { $this->price += $price; } public function info() { echo $this->name . '售价' . $this->price . '元'; echo '<br>'; } } abstract class Decoration { abstract public function addDecoration(MilkTea $milkTea); } class PearlDecoration extends Decoration { public function addDecoration(MilkTea $milkTea) { $milkTea->setName('珍珠'); $milkTea->setPrice(2); } } class RedBeanDecoration extends Decoration { public function addDecoration(MilkTea $milkTea) { $milkTea->setName('红豆'); $milkTea->setPrice(2); } } $milkTea = new MilkTea(); $milkTea->info(); $pearlDecoration = new PearlDecoration(); $pearlDecoration->addDecoration($milkTea); $milkTea->info(); $redBeanDecoration = new RedBeanDecoration(); $redBeanDecoration->addDecoration($milkTea); $milkTea->info(); //第一次输出:奶茶售价3元,加了珍珠(装饰)后输出:珍珠奶茶售价5元,加了红豆(装饰)后输出:红豆珍珠奶茶售价7元 |