十一点了。

<?php
/*
The decorator pattern allows behavior to be added to an individual object instance,
without affecting the behavior of other instances of the same class. We can define
multiple decorators, where each adds new functionality.
*/

interface LoggerInterface {
    public function log($message);
}

class Logger implements LoggerInterface {
    public function log($message) {
        file_put_contents('app.log', $message, FILE_APPEND);
    }
}

abstract class LoggerDecorator implements LoggerInterface{
    protected $logger;

    public function __construct(Logger $logger) {
        $this->logger = $logger;
    }

    abstract public function log($message);
}

class ErrorLoggerDecorator extends LoggerDecorator {
    public function log($message) {
        $this->logger->log('ERROR: ' . $message);
    }
}

class WarningLoggerDecorator extends LoggerDecorator {
    public function log($message) {
        $this->logger->log('WARNING: ' . $message);
    }
}

class NoticeLoggerDecorator extends LoggerDecorator {
    public function log($message) {
        $this->logger->log('NOTICE: ' . $message);
    }
}

$logger = new Logger();
$logger->log('Resource not found.' . PHP_EOL);

$logger = new Logger();
$logger = new ErrorLoggerDecorator($logger);
$logger->log('Invalid user role.' . PHP_EOL);

$logger = new Logger();
$logger = new WarningLoggerDecorator($logger);
$logger->log('Missing address parameters.' . PHP_EOL);

$logger = new Logger();
$logger = new NoticeLoggerDecorator($logger);
$logger->log('Incorrect type provided.' . PHP_EOL);
?>

文件内容

最新文章

  1. pl/sql配置连接远程数据库oracle,本地没有安装oracle数据库的情况下
  2. LINUX 命令定期执行可执行文件
  3. springMVC-HelloWorld
  4. Oracle存储过程java 调用
  5. Mysql索引总结(一)
  6. iOS sqlite3数据库解析
  7. unity3D Socket连接C#server出现unity3D编辑器再次启动连接 unity3D编辑器马上卡死
  8. saxReader的列子
  9. EasyUi DataGrid中数据编辑方式及编辑后数据获取,校验处理
  10. java 显示视频时间--玩的
  11. 【Android进阶】Listview分页加载数据的实现
  12. 构建Docker平台【第四篇】创建服务及扩缩容等操作
  13. Selenium 使用Eclipse+TestNG创建一个Project中遇到的问题
  14. zend studio里面这块注释是用什么快捷键按出来的?
  15. 使用XML序列化实现系统配置 - 开源研究系列文章
  16. LOJ #6539 奇妙数论题
  17. restorecon【转】
  18. The META for Mobile terminal
  19. [Solution] 973. K Closest Points to Origin
  20. OSG描边特效osgFX::Outline的修改

热门文章

  1. 语法上的小trick
  2. Android Studio 之 Navigation【2.数据的传递】
  3. .net中加密与解密
  4. 解决上传文件或图片时选择相同文件无法触发change事件的问题
  5. Django阅读目录
  6. [笔记] 二级指针(pointer to pointer)
  7. Channel概述
  8. Linux中历史命令
  9. JqGrid参考实例
  10. [Cocos Creator]安卓上微信小游戏加载到100%就进不去了