---恢复内容开始---

<?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");
<!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设计模式练习——制作简单的投诉页面的更多相关文章

  1. phalcon: eventManager事件管理(结合dispatcher调度控制器)制作简单的acl

    制作简单的acl, dispatcher(专门用来加载或调度或跳转到相应的url地址即XXXcontroller的调度器或控制器,能够在controller执行前对controller进行停止跳转等) ...

  2. canvas制作简单动画

    在画布元素<canvas>中,除了绘制图形.图像.文字外,还可以制作一些简单的动画,制作过程十分简单,主要分为两步操作: 1.自定义一个函数,用于图形的移动或其他动作. 2.使用setIn ...

  3. JSP制作简单登陆

    JSP制作简单登陆界面 运行环境 eclipse+tomcat+MySQL 不知道的可以参考Jsp运行环境--Tomcat 项目列表 这里我先把jsp文件先放在Web-INF外面访问 需要建立的几个文 ...

  4. Android笔记-4-实现登陆页面并跳转和简单的注册页面

    实现登陆页面并跳转和简单的注册页面   首先我们来看看布局的xml代码 login.xml <span style="font-family:Arial;font-size:18px; ...

  5. 对于使用javaweb技术制作简单管理系统的学习

    近期在老师的引导下我们学习了利用Javaweb技术制作简单的管理系统,其中涉及到的技术很多,由于大多都是自学 对这些技术的理解还太浅显但能实现一些相关功能的雏形. (一).登录功能 在登陆功能中通过与 ...

  6. Highcharts使用教程(1):制作简单图表

    今天我们要使用JavaScript图表Highcharts制作简单的柱形图,我们已经安装好Highcharts,让我们开始制作图表吧. 步骤一 在网页中添加一个div.设置id,设置图表长.高.代码如 ...

  7. ZAM 3D 制作简单的3D字幕 流程(二)

    原地址:http://www.cnblogs.com/yk250/p/5663907.html 文中表述仅为本人理解,若有偏差和错误请指正! 接着 ZAM 3D 制作简单的3D字幕 流程(一) .本篇 ...

  8. 大话设计模式C++版——简单工厂模式

    简单工厂模式应该是所有设计模式中最简单,也最基础的一种模式,以下是一个简单的采用工厂模式写一个加减法的计算器. 1.抽象接口类——依赖倒转原则(高层和底层都要依赖于抽象,针对接口编程) class I ...

  9. FineUI小技巧(1)简单的购物车页面

    起因 最初是一位 FineUI 网友对购物车功能的需求,需要根据产品单价和数量来计算所有选中商品的总价. 这个逻辑最好在前台使用JavaScript实现,如果把这个逻辑移动到后台C#实现,则会导致过多 ...

随机推荐

  1. php数组·的方法1-数组的操作

    //range() 创建一个含指定范围的数组 可设置间隔 var_dump(range(1, 9, 2)); echo '<br>'; //array_combine() 合并两个数组创建 ...

  2. 查看正在运行的sql

    SELECT [Spid] = session_id ,ecid ,[Database] = DB_NAME(sp.dbid) ,[User] = nt_username ,[Status] = er ...

  3. jQuery自动完成插件flexselect

    项目中使用flexselect自动完成插件时遇到一个问题 刚开始以为是js的引用顺序有问题,但是查看后发现不是js引用顺序问题 js引用顺序如下 最后查找资料也没有解决问题,一直提示这个错误 后来在f ...

  4. android Activity启动过程(三)从栈顶Activity的onPause到启动activityon的Resume过程

    ActivityStack.startPausingLocked() IApplicationThread.schudulePauseActivity() ActivityThread.sendMes ...

  5. C# a == b ? c :d 表示的意思

    a==b 为true,这个表达式返回c; a==b为false,这个表达式返回d. 相当于: if(a == b) { return c; } else { return d; }

  6. 如何解释kworker线程的名称

    http://www.kbase101.com/question/24502.html 在Linux 3.11.0-13上 - 在双插槽Xeon X5650六核板上运行的通用,htop显示不同的kwo ...

  7. 数据库mysql--基础命令

    客户端 一.登录和退出 1.登录 mysql -h server-ip -u usename -p 回车,然后会提示输入密码 2.退出:"quit;" | "exit;& ...

  8. Smaug Coverage

  9. Java反射机制分析指南

    一.JAVA是动态语言吗? 一般而言,说到动态言,都是指在程序运行时允许改变程序结构或者变量类型,从这个观点看,JAVA和C++一样,都不是动态语言. 但JAVA它却有着一个非常突出的动态相关机制:反 ...

  10. java题目练手

    大数阶乘 题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=28 代码如下: import java.io.*; import java.ma ...