zoukankan      html  css  js  c++  java
  • PHP设计模式

    1.单例模式

     1 <?php
     2 class Mysql{
     3     private static $instance = null;
     4     private $conn;
     5     //构造方法,设置为private,不允许通过new获得对象
     6     private function __construct(){
     7         $conn = mysql_connect("localhost", "root", "");
     8     }
     9     public static function getInstance(){
    10         if(!self::$instance instanceof self){
    11             self::$instance = new self;
    12         }
    13         return self::$instance;
    14     }
    15     //阻止用户复制对象实例
    16     private function __clone(){}
    17 }
    18 $db = Mysql::getInstance();
    19 ?>

    2.工厂模式

     1 <?php
     2 //定义个抽象类,让子类去继承实现它
     3 abstract class Operation{
     4     abstract public function getValue($num1, $num2);//子类必须实现此方法
     5 }
     6 
     7 //加法类
     8 class OperationAdd extends Operation{
     9     public function getValue($num1, $num2){
    10         return $num1+$num2;
    11     }
    12 }
    13 //减法类
    14 class OperationSub extends Operation{
    15     public function getValue($num1, $num2){
    16         return $num1-$num2;
    17     }
    18 }
    19 //乘法类
    20 class OperationMul extends Operation{
    21     public function getValue($num1, $num2){
    22         return $num1*$num2;
    23     }
    24 }
    25 //除法类
    26 class OperationDiv extends Operation{
    27     public function getValue($num1, $num2){
    28         try{
    29             if($num2 == 0){
    30                 throw new Exception("除数不能为0");
    31             }else{
    32                 return $num1/$num2;
    33             }
    34         }catch(Exception $e){
    35             echo "错误信息:".$e->getMessage();
    36         }
    37     }
    38 }
    39 /**
    40  *  工厂类,主要用来创建对象
    41  *  功能:根据输入的运算符号,工厂就能实例出合适的对象
    42  */
    43 class Factory{
    44     public static function createObj($operate){
    45         switch($operate){
    46             case '+':
    47                 return new OperationAdd();
    48                 break;
    49             case '-':
    50                 return new OperationSub();
    51                 break;
    52             case '*':
    53                 return new OperationMul();
    54                 break;
    55             case '/':
    56                 return new OperationDiv();
    57                 break;
    58         }
    59     }
    60 }
    61 $test=Factory::createObj('/');
    62 $result=$test->getValue(23,0);
    63 echo $result;
    64 ?>

     3.观察者模式

     1 <?php
     2 /**
     3  * 观察者模式
     4  */
     5 class Paper{
     6     private $_observers = array();
     7 
     8     public function register($sub){
     9         $this->_observers[] = $sub;
    10     }
    11 
    12     public function trigger(){
    13         if(!empty($this->_observers)){
    14             foreach($this->_observers as $observer){
    15                 $observer->update();
    16             }
    17         }
    18     }
    19 }
    20 
    21 interface Observerable(){
    22     public function update();
    23 }
    24 
    25 class Subscriber implements Observerable{
    26     public function update(){
    27         echo "OK";
    28     }
    29 }
    30 
    31 $paper = new Paper();
    32 $paper->register(new Subscriber());
    33 $paper->trigger();
    34 ?>

     4.命名链模式

  • 相关阅读:
    【转】win8.1下安装ubuntu
    Codeforces 1025G Company Acquisitions (概率期望)
    Codeforces 997D Cycles in Product (点分治、DP计数)
    Codeforces 997E Good Subsegments (线段树)
    Codeforces 1188E Problem from Red Panda (计数)
    Codeforces 1284E New Year and Castle Building (计算几何)
    Codeforces 1322D Reality Show (DP)
    AtCoder AGC043C Giant Graph (图论、SG函数、FWT)
    Codeforces 1305F Kuroni and the Punishment (随机化)
    AtCoder AGC022E Median Replace (字符串、自动机、贪心、计数)
  • 原文地址:https://www.cnblogs.com/hell0x/p/5489942.html
Copyright © 2011-2022 走看看