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

<?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. centos7-网络与防火墙常用命令

    1.网络配置 vi /etc/sysconfig/network-scripts/ifcfg-ens33 BOOTPROTO="static" IPADDR=192.168.163 ...

  2. linux 文件 s 权限

    s权限的作用:表示对文件具用可执行权限的用户将使用文件拥有者的权限或文件拥有者所在组的权限在对文件进行执行. s权限的设置:4,用户拥有者的执行权限位, 6,用户组的执行权限位, 2, 两者都设置, ...

  3. RTT之POSIX

    POSIX:可移植操作系统接口,是一个标准. 创建线程:如果线程创建成功,线程立刻进入就绪态,参与系统的调度,如果线程创建失败,则会释放之前线程占有的资源int pthread_create (pth ...

  4. Session有什么重大BUG,有什么方法可以解决

    [考点]ASP.NET中Session的多种保存方法.[出现频率]★★★☆☆[解答]使用进程内会话状态模式时,如果aspnet_wp.exe或应用程序域重新启动,则会话状态数据将丢失.可以用Sate ...

  5. ASP .NET 404 Not Found fontawesome-webfont.woff?v=4.0.3

    解决Web部署 svg/woff/woff2字体 404错误最近项目中用到了fontawesome-webfont.svg等字体.部署项目后,发现没有<,+等符号,字体也不对,发现浏览器总是报找 ...

  6. js超链接

    _blank -- 在新窗口中打开链接 _parent -- 在父窗体中打开链接 _self -- 在当前窗体打开链接,此为默认值 _top -- 在当前窗体打开链接,并替换当前的整个窗体(框架页) ...

  7. 关于UnitOfWork

    按照http://martinfowler.com/eaaCatalog/unitOfWork.html这篇文章的介绍,UnitOfWork是为了维护对象的变化,A Unit of Work keep ...

  8. spring-boot学习之属性配置

    通过@value注解,将配置文件中的内容引入

  9. Python函数(3)

    一.装饰器 什么是装饰器,装饰器就是用于拓展原来函数功能的一种函数 装饰器就是用来为被装饰对象添加新功能的工具,装饰器本身可以是任意可调用对象,被装饰的对象也可以是任意可调用对象 装饰器遵循一个关键原 ...

  10. python反爬之网页局部刷新1

    # ajax动态加载网页 # 怎样判断一个网页是不是动态加载的呢? # 查看网页源代码,如果源码中没有你要的数据,尝试访问下一页,当你点击下一页的时候,整个页面没有刷新, 只是局部刷新了,很大的可能是 ...