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 mysql索引问题
Jun 07 PHP
php 判断数组是几维数组
Mar 20 PHP
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
Jun 20 PHP
PHP中file_exists()判断中文文件名无效的解决方法
Nov 12 PHP
PHP GD库生成图像的几个函数总结
Nov 19 PHP
PHP技术开发微信公众平台
Jul 22 PHP
简单谈谈php浮点数精确运算
Mar 10 PHP
PHP 的比较运算与逻辑运算详解
May 12 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
May 20 PHP
使用正则去除php代码中的注释方法
Nov 03 PHP
PHP中Laravel 关联查询返回错误id的解决方法
Apr 01 PHP
利用PHP获取访客IP、地区位置、浏览器及来源页面等信息
Jun 27 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
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
2016/12/02 PHP
js修改table中Td的值(定义td的单击事件)
2013/01/10 Javascript
jquery快捷动态绑定键盘事件的操作函数代码
2013/10/17 Javascript
javascript中call和apply的用法示例分析
2015/04/02 Javascript
关于js函数解释(包括内嵌,对象等)
2016/11/20 Javascript
bootstrap table插件的分页与checkbox使用详解
2017/07/23 Javascript
在 Node.js 中使用原生 ES 模块方法解析
2017/09/19 Javascript
vue发送ajax请求详解
2018/10/09 Javascript
axios携带cookie配置详解(axios+koa)
2018/12/28 Javascript
vue.js多页面开发环境搭建过程
2019/04/24 Javascript
[00:15]天涯墨客终极技能展示
2018/08/25 DOTA
零基础写python爬虫之HTTP异常处理
2014/11/05 Python
详解Python中for循环的使用方法
2015/05/14 Python
python开发中range()函数用法实例分析
2015/11/12 Python
浅谈django model的get和filter方法的区别(必看篇)
2017/05/23 Python
Django基础之Model操作步骤(介绍)
2017/05/27 Python
Pycharm运行加载文本出现错误的解决方法
2019/06/27 Python
python3中numpy函数tile的用法详解
2019/12/04 Python
Pytorch 数据加载与数据预处理方式
2019/12/31 Python
Python字符编码转码之GBK,UTF8互转
2020/02/09 Python
pytorch实现MNIST手写体识别
2020/02/14 Python
Python中关于logging模块的学习笔记
2020/06/03 Python
python中把元组转换为namedtuple方法
2020/12/09 Python
python如何实现递归转非递归
2021/02/25 Python
HTML5 Canvas实现360度全景图的示例代码
2018/01/29 HTML / CSS
摩托车和ATV零件、配件和服装的首选在线零售商:MotoSport
2017/12/22 全球购物
俄罗斯玩具、儿童用品、儿童服装和鞋子网上商店:MyToys.ru
2019/10/14 全球购物
党建示范点实施方案
2014/03/12 职场文书
2014年综治宣传月活动总结
2014/04/28 职场文书
投标文件签署授权委托书范本
2014/10/12 职场文书
派出所副所长四风问题个人整改措施思想汇报
2014/10/13 职场文书
2014年幼儿园安全工作总结
2014/11/10 职场文书
员工离职感谢信
2015/01/22 职场文书
安全事故隐患排查治理制度
2015/08/05 职场文书
防溺水主题班会教案
2015/08/12 职场文书
go使用Gin框架利用阿里云实现短信验证码功能
2021/08/04 Golang