<?php
/**
装饰模式
**/
class Person {
function __construct($name) {
$this->name = $name;
}
function show() {
}
function showStyle() {
$this->dis .= "$this->name style";
echo $this->dis;
}
}
abstract class Finery {
protected $person;
public function decorate($person) {
$this->person = $person;
}
function show() {
if($this->person) {
$this->person->show();
}
}
}
class TShirts extends Finery {
function show() {
$this->person->dis .= 'T-Shirt';
parent::show();
}
}
class BigTrouser extends Finery {
function show() {
$this->person->dis .= 'Big trouser';
parent::show();
}
}
$jam = new Person('jam');
$tshirt = new TShirts();
$bigTrouser = new BigTrouser();
$bigTrouser->decorate($jam);
$tshirt->decorate($jam);
$tshirt->show();
$bigTrouser->show();
$jam->showStyle();
<?php
/**
proxy
**/
interface IAction {
function givePen();
function giveCloth();
}
class Pursuer implements IAction {
private $schoolGril;
function __construct($girl) {
$this->schoolGril = $girl;
}
function givePen() {
echo '送笔给'. $this->schoolGril->name;
}
function giveCloth() {
echo '送衣服'. $this->schoolGril->name;
}
}
class Proxy implements IAction {
private $pursuer;
function __construct(SchoolGirl $girl) {
$this->pursuer = new Pursuer($girl);
}
function givePen() {
$this->pursuer->givePen();
}
function giveCloth() {
$this->pursuer->giveCloth();
}
}
class SchoolGirl {
public $name;
function __construct($name) {
$this->name = $name;
}
}
$gril = new SchoolGirl('MM');
$proxy = new Proxy($gril);
$proxy->givePen();
$proxy->giveCloth();