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.命名链模式

  • 相关阅读:
    [整理]Cadence 生成带有网络追踪的 PDF 原理图
    [整理]FSM 有限状态机
    [原创]Quartus 中调用 Modelsim 波形仿真
    [原创]SPI 协议介绍以及基于 Verilog 的 IP 核实现
    [原创]Verilog 代码编程规范(个人用)
    [算法]线段树
    [算法]tarjan
    poj3280
    poj 3258 River Hopscotch
    [poj 1251]Jungle Roads
  • 原文地址:https://www.cnblogs.com/hell0x/p/5489942.html
Copyright © 2011-2022 走看看