当前位置:首页 > PHP教程 > php面向对象 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-07-11 12:56:02 浏览: 评论:0 

这篇文章主要为大家详细介绍了PHP设计模式下简单投诉页面实例,感兴趣的小伙伴们可以参考一下,本文实例介绍了PHP简单投诉页面的实现代码,分享给大家供大家参考,具体内容如下

php代码:

  1. <?php 
  2.  
  3. /* 
  4.  * 设计模式练习 
  5.  * 1.数据库连接类(单例模式) 
  6.  * 2.调用接口实现留言本功能(工厂模式) 
  7.  * 3.实现分级举报处理功能(责任链模式) 
  8.  * 4.发送不同组合的举报信息(桥接模式) 
  9.  * 5.发送不同格式的举报信息(适配器模式) 
  10.  * 6.在投诉内容后自动追加时间(装饰器模式) 
  11.  * 7.根据会员登录信息变换显示风格(观察者模式) 
  12.  * 8.根据发帖长度加经验值(策略模式) 
  13.  */ 
  14.  
  15. interface DB { 
  16.  
  17.   function conn(); 
  18.  
  19. /** 
  20.  * 单例模式 
  21.  */ 
  22. class MysqlSingle implements DB { 
  23.  
  24.   protected static $_instance = NULL; 
  25.  
  26.   public static function getInstance() { 
  27.     if (!self::$_instance instanceof self) { 
  28.       self::$_instance = new self; 
  29.     } 
  30.     return self::$_instance
  31.   } 
  32.  
  33.   final protected function __construct() { 
  34.     echo 'Mysql单例创建成功<br>'
  35.   } 
  36.  
  37.   final protected function __clone() { 
  38.     return false; 
  39.   } 
  40.  
  41.   public function conn() { 
  42.     echo 'Mysql连接成功<br>'
  43.   } 
  44.  
  45.  
  46. /** 
  47.  * 工厂模式 
  48.  */ 
  49. interface Factory { 
  50.  
  51.   function createDB(); 
  52.  
  53. class MysqlFactory implements Factory { 
  54.  
  55.   public function createDB() { 
  56.     echo 'Mysql工厂创建成功<br>'
  57.     return MysqlSingle::getInstance(); 
  58.   } 
  59.  
  60.  
  61. /** 
  62.  * 根据用户名显示不同风格 
  63.  * 观察者模式 
  64.  */ 
  65. class Observer implements SplSubject { 
  66.  
  67.   protected $_observers = NULL; 
  68.   public $_style = NULL; 
  69.  
  70.   public function __construct($style) { 
  71.     $this->_style = $style
  72.     $this->_observers = new SplObjectStorage(); 
  73.   } 
  74.  
  75.   public function show() { 
  76.     $this->notify(); 
  77.   } 
  78.  
  79.   public function attach(SplObserver $observer) { 
  80.     $this->_observers->attach($observer); 
  81.   } 
  82.  
  83.   public function detach(SplObserver $observer) { 
  84.     $this->_observers->detach($observer); 
  85.   } 
  86.  
  87.   public function notify() { 
  88.     $this->_observers->rewind(); 
  89.     while ($this->_observers->valid()) { 
  90.       $observer = $this->_observers->current(); 
  91.       $observer->update($this); 
  92.       $this->_observers->next(); 
  93.     } 
  94.   } 
  95.  
  96.  
  97. class StyleA implements SplObserver { 
  98.  
  99.   public function update(SplSubject $subject) { 
  100.     echo $subject->_style . ' 模块A<br>'
  101.   } 
  102.  
  103.  
  104. class StyleB implements SplObserver { 
  105.  
  106.   public function update(SplSubject $subject) { 
  107.     echo $subject->_style . ' 模块B<br>'
  108.   } 
  109.  
  110.  
  111. /** 
  112.  * 根据不同方式进行投诉 
  113.  * 桥接模式 
  114.  */ 
  115. class Bridge { 
  116.  
  117.   protected $_obj = NULL; 
  118.  
  119.   public function __construct($obj) { 
  120.     $this->_obj = $obj
  121.   } 
  122.  
  123.   public function msg($type) { 
  124.       
  125.   } 
  126.  
  127.   public function show() { 
  128.     $this->msg(); 
  129.     $this->_obj->msg(); 
  130.   } 
  131.  
  132.  
  133. class BridgeEmail extends Bridge { 
  134.  
  135.   public function msg() { 
  136.     echo 'Email>>'
  137.   } 
  138.  
  139.  
  140. class BridgeSms extends Bridge { 
  141.  
  142.   public function msg() { 
  143.     echo 'Sms>>'
  144.   } 
  145.  
  146.  
  147. class Normal { 
  148.  
  149.   public function msg() { 
  150.     echo 'Normal<br>'
  151.   } 
  152.  
  153.  
  154. class Danger { 
  155.  
  156.   public function msg() { 
  157.     echo 'Danger<br>'
  158.   } 
  159.  
  160.  
  161. /** 
  162.  * 适配器模式 
  163.  */ 
  164. class Serialize { 
  165.  
  166.   public $content = NULL; 
  167.  
  168.   public function __construct($content) { 
  169.     $this->content = serialize($content); 
  170.   } 
  171.  
  172.   public function show() { 
  173.     return '序列化格式:<br>' . $this->content; 
  174.   } 
  175.  
  176.  
  177. class JsonAdapter extends Serialize { 
  178.  
  179.   public function __construct($content) { 
  180.     parent::__construct($content); 
  181.     $tmp = unserialize($this->content); 
  182.     $this->content = json_encode($tmp, TRUE); 
  183.   } 
  184.  
  185.   public function show() { 
  186.     return 'Json格式:<br>' . $this->content; 
  187.   } 
  188.  
  189.  
  190. /** 
  191.  * 在投诉内容后自动追加 
  192.  * 装饰器模式 
  193.  */ 
  194. class Base { 
  195.  
  196.   protected $_content = NULL; 
  197.  
  198.   public function __construct($content) { 
  199.     $this->_content = $content
  200.   } 
  201.  
  202.   public function getContent() { 
  203.     return $this->_content; 
  204.   } 
  205.  
  206.  
  207. class Decorator { 
  208.  
  209.   private $_base = NULL; 
  210.  
  211.   public function __construct(Base $base) { 
  212.     $this->_base = $base
  213.   } 
  214.  
  215.   public function show() { 
  216.     return $this->_base->getContent() . '>>系统时间:' . date('Y-m-d H:i:s', time()); 
  217.   } 
  218.  
  219.  
  220. /** 
  221.  * 分级举报处理功能 
  222.  * 责任链模式 
  223.  */ 
  224. class level1 { 
  225.  
  226.   protected $_level = 1; 
  227.   protected $_top = 'Level2'
  228.  
  229.   public function deal($level) { 
  230.     if ($level <= $this->_level) { 
  231.       echo '处理级别:1<br>'
  232.       return
  233.     } 
  234.     $top = new $this->_top; 
  235.     $top->deal($level); 
  236.   } 
  237.  
  238.  
  239. class level2 { 
  240.  
  241.   protected $_level = 2; 
  242.   protected $_top = 'Level3'
  243.  
  244.   public function deal($level) { 
  245.     if ($level <= $this->_level) { 
  246.       echo '处理级别:2<br>'
  247.       return
  248.     } 
  249.     $top = new $this->_top; 
  250.     $top->deal($level); 
  251.   } 
  252.  
  253.  
  254. class level3 { 
  255.  
  256.   protected $_level = 3; 
  257.   protected $_top = 'Level2'
  258.  
  259.   public function deal($level) { 
  260.     echo '处理级别:3<br>'
  261.     return
  262.   } 
  263.  
  264.  
  265. if (!emptyempty($_POST)) { 
  266.   echo '<h1>PHP设计模式</h1>'
  267.   //连接数据库——工厂+单例模式 
  268.   $mysqlFactory = new MysqlFactory(); 
  269.   $single = $mysqlFactory->createDB(); 
  270.   $single->conn(); 
  271.   echo '<br>'
  272.   //观察者模式 
  273.   $username = $_POST['username']; 
  274.   $ob = new Observer($username); 
  275.   $a = new StyleA(); 
  276.   $ob->attach($a); 
  277.   $b = new StyleB(); 
  278.   $ob->attach($b); 
  279.   $ob->show(); 
  280.   echo '<br>'
  281.   $ob->detach($b); 
  282.   $ob->show(); 
  283.   echo '<br>'
  284.   //桥接模式 
  285.   $typeM = $_POST['typeM']; 
  286.   $typeN = 'Bridge' . $_POST['typeN']; 
  287.   $obj = new $typeN(new $typeM); 
  288.   $obj->show(); 
  289.   echo '<br>'
  290.   //适配器模式 
  291.   $post = $_POST
  292.   $obj = new Serialize($post); 
  293.   echo $obj->show(); 
  294.   echo '<br>'
  295.   $json = new JsonAdapter($post); 
  296.   echo $json->show(); 
  297.   echo '<br>'
  298.   echo '<br>'
  299.   //装饰器模式 
  300.   $content = $_POST['content']; 
  301.   $decorator = new Decorator(new Base($content)); 
  302.   echo $decorator->show(); 
  303.   echo '<br>'
  304.   //责任链模式 
  305.   echo '<br>'
  306.   $level = $_POST['level']; 
  307.   $deal = new Level1(); 
  308.   $deal->deal(intval($level)); 
  309.   return
  310. require("0.html"); 

html代码:

  1. <!DOCTYPE html> 
  2. <!-- 
  3. To change this license header, choose License Headers in Project Properties. 
  4. To change this template file, choose Tools | Templates 
  5. and open the template in the editor. 
  6. --> 
  7. <html> 
  8.   <head> 
  9.     <title>PHP设计模式</title> 
  10.     <meta charset="UTF-8"> 
  11.     <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
  12.     <style> 
  13.       div{border:solid gray 1px;margin-top:10px;height: 100px;width: 200px;} 
  14.     </style> 
  15.   </head> 
  16.   <body> 
  17.     <form action="0.php" method="post"> 
  18.       <h1>用户名</h1> 
  19.       <select id="username" name="username"> 
  20.         <option value="Tom">Tom</option> 
  21.         <option value="Lily">Lily</option> 
  22.       </select> 
  23.       <h1>投诉方式</h1> 
  24.       <select id="type" name="typeM"> 
  25.         <option value="Normal">Normal</option> 
  26.         <option value="Danger">Danger</option> 
  27.       </select> 
  28.       <select id="type" name="typeN"> 
  29.         <option value="Email">Email</option> 
  30.         <option value="Sms">Sms</option> 
  31.       </select> 
  32.       <h1>处理级别</h1> 
  33.       <select id="level" name="level"> 
  34.         <option value="1">1</option> 
  35.         <option value="2">2</option> 
  36.         <option value="3">3</option> 
  37.       </select> 
  38.       <h1>投诉内容</h1> 
  39.       <textarea id="content" name="content" rows="3"></textarea> 
  40.       <button type="submit">提交</button> 
  41.     </form> 
  42.   </body> 
  43. </html> 

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

Tags: PHP设计模式 PHP投诉页面

分享到: