PHP设计模式之简单投诉页面实例
author:一佰互联 2019-04-27   click:147

本文实例介绍了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 (!empty($_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 | Templatesand 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 id="username" name="username">        <option value="Tom">Tom</option>        <option value="Lily">Lily</option>      </select>      <h1>投诉方式</h1>      <select id="type" name="typeM">        <option value="Normal">Normal</option>        <option value="Danger">Danger</option>      </select>      <select id="type" name="typeN">        <option value="Email">Email</option>        <option value="Sms">Sms</option>      </select>      <h1>处理级别</h1>      <select id="level" name="level">        <option value="1">1</option>        <option value="2">2</option>        <option value="3">3</option>      </select>      <h1>投诉内容</h1>      <textarea id="content" name="content" rows="3"></textarea>      <button type="submit">提交</button>    </form>  </body></html>

以上就是本文的全部内容,希望对大家的学习有所帮助。