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 (!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>

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



相关阅读:
C#实现自定义FTP操作封装类实例
Win10下DX12实测:老卡老U能力翻3倍
Jquery插件easyUi表单验证提交(示例代码)
详解Linux中用于查询用户信息的finger和chfn命令
AngularJs学习第八篇 过滤器filter创建
html制作细线表格的简单实例
Jquery实现自定义tooltip示例代码
CSS3制作酷炫的三维相册效果
javascript中indexOf技术详解
js实现ArrayList功能附实例代码
C标准库<assert.h>的实现详解
jQuery中ajax - get() 方法实例详解
Win8.1系统在安全模式下杀毒教程
Android 取得状态栏、任务栏高度的小例子
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 CMS SQL jQuery C# C++ java Android IOS oracle MongoDB PostgreSQL SQLite 交通频道 祁门金字牌客运站 三二六省道
清丰汽车站 河南省濮阳市清丰县
六陈客运站 广西壮族自治区贵港市平南县
登封颍阳客运总站 三二三省道
皮口客运站 辽宁省大连市普兰店市
高坪汽车站候车厅 四川省南充市高坪区
桥头胡汽车站 桥井东路
黑河罕达气客运站 黑龙江省黑河市爱辉区
巧家白鹤滩农村客运站 云南省昭通市巧家县
吴忠汽车站 明珠西路塞上江南小区对面
郝家汽车站 山东省东营市垦利县
运城大上王车站 山西省运城市盐湖区
邯郸汽车客运总站 浴新南大街29号
东川汽车客运站 沙坝巷
南京中北六合大圣客运站 江苏省南京市六合区
万家乡新埠子客运站 湖北省荆州市松滋市
青龙木头凳汽车站 三五五省道
石家庄运输总公司矿区汽车站 河北省石家庄市井陉矿区
新郑车站 河南省郑州市新郑市
巨野独山客运站 山东省菏泽市巨野县
连平隆街客运站 广东省河源市连平县
满城汽车站 中山路
五莲汽车站 山东省日照市五莲县
榆树黑林客运站 吉林省长春市榆树市
项城市客运东站 河南省周口市项城市
镇宁布依族苗族自治县社会客运站 贵州省安顺市镇宁布依族苗族自治县
城东客运站 广东省茂名市信宜市
顾山客运站 江苏省无锡市江阴市
海林农村客运站 黑龙江省牡丹江市海林市
赵村客运站 河南省商丘市宁陵县
溁湾镇汽车站 长沙市溁湾路附近
丰乐汽车站 甘肃省武威市凉州区
丘北八道哨汽车客运站 云南省文山壮族苗族自治州丘北县
永善莲峰镇客运站 云南省昭通市永善县
永安中心客运站 三五八县道
那务客运站 广东省茂名市化州市
龙川上坪客运站 广东省河源市龙川县
卧云寺客运站 四川省德阳市绵竹市
邹平服务区-邹平高速客运站 山东省滨州市邹平县
泰安泰山汽车东站 山东省泰安市泰山区
常宁市富贵汽车站 湖南省衡阳市常宁市
徐闻海安客运站 广东省湛江市徐闻县
龙川新城客运站 广东省河源市龙川县
赵岗向客运站 河南省信阳市固始县
建始客运站 烟墩大道
明月客运站 重庆市
合兴客运站 重庆市
溧水县客运总站 溧水县交通路39号
石潭汽车站 湖南省湘潭市湘潭县
北马路汽车站-公交车站 烟台市芝罘区南大街79号(南大街与四德街交叉口,振华购物中心旁边)
大孙汽车站 山东省德州市乐陵市
黄粮客运站 湖北省宜昌市兴山县
上饶县东江汽车运输公司 旭日北大道159
勃利吉兴客运站 吉兴乡
上庄汽车客运站 河北省唐山市迁安市
潍坊公路客运总站候车厅 山东省潍坊市潍城区
新昌县客运江北站站点 一零四国道
邹城交通局中心店客运站 山东省济宁市邹城市
全椒马厂客运站 零三零县道
遵化汽车客运站 河北省唐山市遵化市
耒阳灶市汽车站 五一中路
弥渡客运站 云南省大理白族自治州弥渡县
留坝火烧店客运站 陕西省汉中市留坝县
宣汉汽车站超市 四川省达州市宣汉县
婺源中云车站 江西省上饶市婺源县
迪沟客运站 安徽省阜阳市颍上县
十洋客运站 郑和中路
北滘交通中心 广东省佛山市顺德区
东莞东坑汽车站 东坑镇中兴大道
明觉客运站 四川省广元市元坝区
万隆乡客运站 河南省开封市开封县
阿克塞客运站 甘肃省酒泉市阿克塞哈萨克族自治县
桦甸八道客运站 吉林省吉林市桦甸市
惠州横沥车站 横沥镇附近
东莞东城榴花客运站 广东省东莞市东城区峡口管理区榴花路
磐石市客运南站 前景路
文陂汽车站 江西省吉安市青原区
闽清塔庄客运站 福建省福州市闽清县
流芳客运站-公交车站 武昌区中山路669号(近航海客运站)公交/驾车
井陉吴家窑客运站 河北省石家庄市井陉县
大鹏客运服务部 江苏省.扬州市仪征市渡江路157号
云安车站白石分站 广东省云浮市云安县
象州马坪客运站 龙响附近
营口市长途客运站 辽宁省营口市站前区
平南城东东站 广西壮族自治区贵港市平南县
泸州汽车站售票大厅 四川省泸州市江阳区
吉祥馄饨汽车站店 江苏省常州市天宁区
华堡客运站 河南省商丘市宁陵县
涪陵龙桥汽车站 重庆市涪陵区
乾安大布苏客运站 吉林省松原市乾安县
汶上县军屯客运站 山东省济宁市汶上县
娄庄客运站 河南省漯河市召陵区
上海市芦潮港客运站 芦潮港路1969号
东平商老庄客运站 山东省泰安市东平县
昌宁柯街客运站 柯街镇柯街村
谭店客运站 河南省驻马店市西平县
杭州径游汽车站 浙江省杭州市萧山区
巴中梁永客运站 四川省巴中市巴州区
木石汽车站 山东省枣庄市滕州市
余坪车站 四川省眉山市洪雅县

Copyright © 2016 phpStudy |