PHP设计模式之简单投诉页面实例
这篇文章主要为大家详细介绍了PHP设计模式下简单投诉页面实例,感兴趣的小伙伴们可以参考一下,本文实例介绍了PHP简单投诉页面的实现代码,分享给大家供大家参考,具体内容如下
php代码:
- <?php
- /*
- * 设计模式练习
- * 1.数据库连接类(单例模式)
- * 2.调用接口实现留言本功能(工厂模式)
- * 3.实现分级举报处理功能(责任链模式)
- * 4.发送不同组合的举报信息(桥接模式)
- * 5.发送不同格式的举报信息(适配器模式)
- * 6.在投诉内容后自动追加时间(装饰器模式)
- * 7.根据会员登录信息变换显示风格(观察者模式)
- * 8.根据发帖长度加经验值(策略模式)
- */
- interface DB {
- function conn();
- }
- /**
- * 单例模式
- */
- class MysqlSingle implements DB {
- protected static $_instance = NULL;
- public static function getInstance() {
- if (!self::$_instance instanceof self) {
- self::$_instance = new self;
- }
- return self::$_instance;
- }
- final protected function __construct() {
- echo 'Mysql单例创建成功<br>';
- }
- final protected function __clone() {
- return false;
- }
- public function conn() {
- echo 'Mysql连接成功<br>';
- }
- }
- /**
- * 工厂模式
- */
- interface Factory {
- function createDB();
- }
- class MysqlFactory implements Factory {
- public function createDB() {
- echo 'Mysql工厂创建成功<br>';
- return MysqlSingle::getInstance();
- }
- }
- /**
- * 根据用户名显示不同风格
- * 观察者模式
- */
- class Observer implements SplSubject {
- protected $_observers = NULL;
- public $_style = NULL;
- public function __construct($style) {
- $this->_style = $style;
- $this->_observers = new SplObjectStorage();
- }
- public function show() {
- $this->notify();
- }
- public function attach(SplObserver $observer) {
- $this->_observers->attach($observer);
- }
- public function detach(SplObserver $observer) {
- $this->_observers->detach($observer);
- }
- public function notify() {
- $this->_observers->rewind();
- while ($this->_observers->valid()) {
- $observer = $this->_observers->current();
- $observer->update($this);
- $this->_observers->next();
- }
- }
- }
- class StyleA implements SplObserver {
- public function update(SplSubject $subject) {
- echo $subject->_style . ' 模块A<br>';
- }
- }
- class StyleB implements SplObserver {
- public function update(SplSubject $subject) {
- echo $subject->_style . ' 模块B<br>';
- }
- }
- /**
- * 根据不同方式进行投诉
- * 桥接模式
- */
- class Bridge {
- protected $_obj = NULL;
- public function __construct($obj) {
- $this->_obj = $obj;
- }
- public function msg($type) {
- }
- public function show() {
- $this->msg();
- $this->_obj->msg();
- }
- }
- class BridgeEmail extends Bridge {
- public function msg() {
- echo 'Email>>';
- }
- }
- class BridgeSms extends Bridge {
- public function msg() {
- echo 'Sms>>';
- }
- }
- class Normal {
- public function msg() {
- echo 'Normal<br>';
- }
- }
- class Danger {
- public function msg() {
- echo 'Danger<br>';
- }
- }
- /**
- * 适配器模式
- */
- class Serialize {
- public $content = NULL;
- public function __construct($content) {
- $this->content = serialize($content);
- }
- public function show() {
- return '序列化格式:<br>' . $this->content;
- }
- }
- class JsonAdapter extends Serialize {
- public function __construct($content) {
- parent::__construct($content);
- $tmp = unserialize($this->content);
- $this->content = json_encode($tmp, TRUE);
- }
- public function show() {
- return 'Json格式:<br>' . $this->content;
- }
- }
- /**
- * 在投诉内容后自动追加
- * 装饰器模式
- */
- class Base {
- protected $_content = NULL;
- public function __construct($content) {
- $this->_content = $content;
- }
- public function getContent() {
- return $this->_content;
- }
- }
- class Decorator {
- private $_base = NULL;
- public function __construct(Base $base) {
- $this->_base = $base;
- }
- public function show() {
- return $this->_base->getContent() . '>>系统时间:' . date('Y-m-d H:i:s', time());
- }
- }
- /**
- * 分级举报处理功能
- * 责任链模式
- */
- class level1 {
- protected $_level = 1;
- protected $_top = 'Level2';
- public function deal($level) {
- if ($level <= $this->_level) {
- echo '处理级别:1<br>';
- return;
- }
- $top = new $this->_top;
- $top->deal($level);
- }
- }
- class level2 {
- protected $_level = 2;
- protected $_top = 'Level3';
- public function deal($level) {
- if ($level <= $this->_level) {
- echo '处理级别:2<br>';
- return;
- }
- $top = new $this->_top;
- $top->deal($level);
- }
- }
- class level3 {
- protected $_level = 3;
- protected $_top = 'Level2';
- public function deal($level) {
- echo '处理级别:3<br>';
- return;
- }
- }
- if (!emptyempty($_POST)) {
- echo '<h1>PHP设计模式</h1>';
- //连接数据库——工厂+单例模式
- $mysqlFactory = new MysqlFactory();
- $single = $mysqlFactory->createDB();
- $single->conn();
- echo '<br>';
- //观察者模式
- $username = $_POST['username'];
- $ob = new Observer($username);
- $a = new StyleA();
- $ob->attach($a);
- $b = new StyleB();
- $ob->attach($b);
- $ob->show();
- echo '<br>';
- $ob->detach($b);
- $ob->show();
- echo '<br>';
- //桥接模式
- $typeM = $_POST['typeM'];
- $typeN = 'Bridge' . $_POST['typeN'];
- $obj = new $typeN(new $typeM);
- $obj->show();
- echo '<br>';
- //适配器模式
- $post = $_POST;
- $obj = new Serialize($post);
- echo $obj->show();
- echo '<br>';
- $json = new JsonAdapter($post);
- echo $json->show();
- echo '<br>';
- echo '<br>';
- //装饰器模式
- $content = $_POST['content'];
- $decorator = new Decorator(new Base($content));
- echo $decorator->show();
- echo '<br>';
- //责任链模式
- echo '<br>';
- $level = $_POST['level'];
- $deal = new Level1();
- $deal->deal(intval($level));
- return;
- }
- require("0.html");
html代码:
- <!DOCTYPE html>
- <!--
- To change this license header, choose License Headers in Project Properties.
- To change this template file, choose Tools | Templates
- and open the template in the editor.
- -->
- <html>
- <head>
- <title>PHP设计模式</title>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <style>
- div{border:solid gray 1px;margin-top:10px;height: 100px;width: 200px;}
- </style>
- </head>
- <body>
- <form action="0.php" method="post">
- <h1>用户名</h1>
- <select name="username">
- <option value="Tom">Tom</option>
- <option value="Lily">Lily</option>
- </select>
- <h1>投诉方式</h1>
- <select name="typeM">
- <option value="Normal">Normal</option>
- <option value="Danger">Danger</option>
- </select>
- <select name="typeN">
- <option value="Email">Email</option>
- <option value="Sms">Sms</option>
- </select>
- <h1>处理级别</h1>
- <select name="level">
- <option value="1">1</option>
- <option value="2">2</option>
- <option value="3">3</option>
- </select>
- <h1>投诉内容</h1>
- <textarea name="content" rows="3"></textarea>
- <button type="submit">提交</button>
- </form>
- </body>
- </html>
以上就是本文的全部内容,希望对大家的学习有所帮助。