PHP设计模式之简单投诉页面实例


Posted in PHP onFebruary 24, 2016

本文实例介绍了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 | 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 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>

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

PHP 相关文章推荐
简体中文转换为繁体中文的PHP函数
Oct 09 PHP
隐藏你的.php文件的实现方法
Mar 19 PHP
收集的PHP中与数组相关的函数
Mar 22 PHP
php Memcache 中实现消息队列
Nov 24 PHP
PHP5 字符串处理函数大全
Mar 23 PHP
phpcms模块开发之swfupload的使用介绍
Apr 28 PHP
PHP实现事件机制实例分析
Jun 26 PHP
Java中final关键字详解
Aug 10 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
Oct 26 PHP
php抛出异常与捕捉特定类型的异常详解
Oct 26 PHP
PHP 使用二进制保存用户状态的实例
Jan 29 PHP
php实现微信支付之退款功能
May 30 PHP
在Mac OS上编译安装Nginx+PHP+MariaDB开发环境的教程
Feb 23 #PHP
phalcon框架使用指南
Feb 23 #PHP
PHP计算日期相差天数实例分析
Feb 23 #PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
Feb 23 #PHP
PHP编写RESTful接口
Feb 23 #PHP
PHP实现查询两个数组中不同元素的方法
Feb 23 #PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
Feb 23 #PHP
You might like
兼容PHP5的PHP目录管理函数库
2008/07/10 PHP
php中选择什么接口(mysql、mysqli)访问mysql
2013/02/06 PHP
PHP register_shutdown_function函数的深入解析
2013/06/03 PHP
thinkphp5框架API token身份验证功能示例
2019/05/21 PHP
javascript去掉前后空格的实例
2013/11/07 Javascript
JavaScript的函数式编程基础指南
2016/03/19 Javascript
AngularJS ng-mousedown 指令
2016/08/02 Javascript
node.js平台下的mysql数据库配置及连接
2017/03/31 Javascript
详解使用Visual Studio Code对Node.js进行断点调试
2017/09/14 Javascript
详解angular如何调用HTML字符串的方法
2018/06/30 Javascript
微信小程序实现左滑修改、删除功能
2020/10/19 Javascript
基于layui实现高级搜索(筛选)功能
2019/07/26 Javascript
js页面加载后执行的几种方式小结
2020/01/30 Javascript
Vue使用自定义指令实现拖拽行为实例分析
2020/06/06 Javascript
uniapp 仿微信的右边下拉选择弹出框的实现代码
2020/07/12 Javascript
vue data变量相互赋值后被实时同步的解决步骤
2020/08/05 Javascript
js删除指定位置超链接中含有百度与360的标题
2021/01/06 Javascript
分析python服务器拒绝服务攻击代码
2014/01/16 Python
python插入排序算法实例分析
2015/07/03 Python
python用模块zlib压缩与解压字符串和文件的方法
2016/12/16 Python
pycharm+django创建一个搜索网页实例代码
2018/01/24 Python
Django REST framework 如何实现内置访问频率控制
2019/07/23 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
2019/11/04 Python
python 弧度与角度互转实例
2020/04/15 Python
如何基于Python爬取隐秘的角落评论
2020/07/02 Python
浅析css3中matrix函数的使用
2016/06/06 HTML / CSS
GOOD AMERICAN官网:为曲线性感而设计
2017/12/28 全球购物
美国摩托车头盔、零件、齿轮及配件商店:Cycle Gear
2019/06/12 全球购物
库房管理员岗位职责
2014/03/09 职场文书
移风易俗倡议书
2014/04/15 职场文书
2014年电厂个人工作总结
2014/11/27 职场文书
刘公岛导游词
2015/02/05 职场文书
辞职信怎么写
2015/02/27 职场文书
Win11怎么进入安全模式?Windows 11进入安全模式的方法
2021/11/21 数码科技
Python matplotlib绘制条形统计图 处理多个实验多组观测值
2022/04/21 Python
Sentry的安装、配置、使用教程(Sentry日志手机系统)
2022/07/23 Python