//产品
abstract class Person {
abstract function getPermission();
}
//被装饰者
class User extends Person {
public function getPermission() {
return '公开文档';
}
}
//装饰类
class PermUser extends Person {
protected $_user;
protected $_special = '';
function __construct($user) {
$this->_user = $user;
}
public function getPermission() {
return $this->_user->getPermission() . $this->_special;
}
}
//装饰类产品
class JavaUser extends PermUser {
protected $_special = ' java程序';
}
class CPlusUser extends PermUser {
protected $_special = ' c++程序';
}
$user = new User();
printf("permission:%sn", $user->getPermission());
$user = new JavaUser($user);
printf("permission:%sn", $user->getPermission());
$user = new CPlusUser($user);
printf("permission:%sn", $user->getPermission());
function __construct($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
class User extends UserBaseInfo {
private $login = false;
public function setLogin($islogin) {
$this->login = $islogin;
}
public function isLogin() {
return $this->login;
}
}
$user = new User('张三');
$user->setLogin(true);
if ($user->isLogin()) {
echo $user->getName()."已经登录了n";
} else {
echo $user->getName()."还没有登录n";
}
//组合模式
class LoginInfo {
protected $user;
protected $login = false;
public function setLogin($user, $isLogin) {
$this->user = $user;
$this->login = $isLogin;
}
public function isLogin() {
return $this->login;
}
}
$user = new User('张三');
$login = new LoginInfo();
$login->setLogin($user, true);
if ($login->isLogin()) {
echo $user->getName()."已经登录了n";
} else {
echo $user->getName()."还没有登录n";
}
//部分可以更换,用继承则不行
class Admin {
protected $level;
function __construct($level) {
$this->level = $level;
}
function getLevel() {
return $this->level;
}
}
$admin = new Admin(1);
$login->setLogin($admin, true);
if ($login->isLogin()) {
printf("级别为 %d 的管理员已经登录了n", $admin->getLevel());
} else {
printf("级别为 %d 的管理员还没有登录n", $admin->getLevel());
}
class Operation {
public function testPlus() {
printf("plus: %sn", (1 + 2 == 3 ? 'true' : 'false'));
}
public function testMinus() {
printf("minus: %sn", (3 - 2 == 2 ? 'true' : 'false'));
}
public function testTimes() {
printf("times: %sn", (2 * 3 == 6 ? 'true' : 'false'));
}
}
class Tester {
protected $_operation;
function __construct() {
$this->_operation = new Operation();
}
public function testAll() {
$this->_operation->testPlus();
$this->_operation->testMinus();
$this->_operation->testTimes();
}
}
//测试用例,测试全部接口
$tester = new Tester();
$tester->testAll();