PHP设计模式之装饰者模式代码实例
定义:
装饰者模式就是不修改原类代码和继承的情况下动态扩展类的功能。传统的编程模式都是子类继承父类实现方法重载,使用装饰器模式,只需添加一个新的装饰器对象,更加灵活,避免类数量和层次过多。
角色:
Component(被装饰对象基类)
ConcreteComponent(具体被装饰对象)
Decorator(装饰者基类)
ContreteDecorator(具体的装饰者类)
示例代码:
//被装饰者基类
interfaceComponent
{
publicfunctionoperation();
}
//装饰者基类
abstractclassDecoratorimplementsComponent
{
protected$component;
publicfunction__construct(Component$component)
{
$this->component=$component;
}
publicfunctionoperation()
{
$this->component->operation();
}
}
//具体装饰者类
classConcreteComponentimplementsComponent
{
publicfunctionoperation()
{
echo'dooperation'.PHP_EOL;
}
}
//具体装饰类A
classConcreteDecoratorAextendsDecorator{
publicfunction__construct(Component$component){
parent::__construct($component);
}
publicfunctionoperation(){
parent::operation();
$this->addedOperationA();//新增加的操作
}
publicfunctionaddedOperationA(){
echo'AddOperationA'.PHP_EOL;
}
}
//具体装饰类B
classConcreteDecoratorBextendsDecorator{
publicfunction__construct(Component$component){
parent::__construct($component);
}
publicfunctionoperation(){
parent::operation();
$this->addedOperationB();
}
publicfunctionaddedOperationB(){
echo'AddOperationB'.PHP_EOL;
}
}
classClient{
publicstaticfunctionmain(){
/*
dooperation
AddOperationA
*/
$decoratorA=newConcreteDecoratorA(newConcreteComponent());
$decoratorA->operation();
/*
dooperation
AddOperationA
AddOperationB
*/
$decoratorB=newConcreteDecoratorB($decoratorA);
$decoratorB->operation();
}
}
Client::main();
热门推荐
10 香港老妈结婚祝福语简短
11 毕业立体贺卡祝福语简短
12 简短新年年会祝福语
13 评论小品祝福语大全简短
14 恭喜师兄结婚祝福语简短
15 员工集体辞职祝福语简短
16 高中新生祝福语 简短
17 装修祝福语男生搞笑简短
18 生日开业蛋糕祝福语简短