美文网首页
PHP中的设计模式

PHP中的设计模式

作者: 8d2855a6c5d0 | 来源:发表于2017-11-13 14:38 被阅读0次

    单例模式

    /*
    *单例模式:一个类只能有一个对象
    *三私一公
    */
    class MySQLDB {
        //私有的成员用来保存类的实例
        private static $instance;
        //私有的构造函数阻止在类的外部实例化          
        private function __construct() {    
        }
        //私有的__clone()阻止clone对象
        private function __clone() {        
        }
        //公有的方法用来获取类的实例
        public static function getInstance() {  
            if(!self::$instance instanceof self )
                self::$instance=new self;
            return self::$instance;
        }
    }
    $db1=MySQLDB::getInstance();
    $db2=MySQLDB::getInstance();
    var_dump($db1,$db2);
    

    项目层面的单例应用,实例化多个数据库模型

    class DB1 {
    }
    class DB2 {
    }
    class DB3 {
    }
    
    function getInstance($db_name)
    {
        static $array = array();
        if(!isset($array[$db_name])) {
            $array[$db_name] = new $db_name;
        }
        return  $array[$db_name];
    }
    

    工厂模式

    传递不同的参数,获得不同的对象

    abstract class Product {
        abstract public function getName();
    }
    class ProductA extends Product  {
        public function getName() {
            echo '这是A商品<br>';
        }
    }
    class ProductB extends Product {
        public function getName() {
            echo '这是B商品<br>';
        }
    }
    //工厂模式
    class ProductFactory {
        public static function create($num) {
            switch($num) {
                case 1:
                    return new ProductA();
                case 2:
                    return new ProductB();
            }
            return null;
        }
    }
    //传递不同的参数获取不同的对象
    $obj=ProductFactory::create(1);
    $obj->getName();    //这是A商品
    $obj=ProductFactory::create(2);
    $obj->getName();    //这是B商品
    

    策略模式

    传递不同的参数,调用不同的策略(方法)

    interface IStrategy {
        function ontheway();
    }
    class Walk implements IStrategy {
        public function ontheway() {
            echo '走着去<br>';
        }
    }
    class Bick implements IStrategy {
        public function ontheway() {
            echo '骑自行车去<br>';
        }
    }
    class Bus implements IStrategy {
        public function ontheway() {
            echo '坐巴士去<br>';
        }   
    }
    //策略模式,传递不同的参数,调用不同的策略
    class Strategy{
        public function getWay(IStrategy $obj) {
            $obj->ontheway();
        }
    }
    $obj=new Strategy();
    $obj->getWay(new Walk);     //走着去
    $obj->getWay(new Bick);     //骑自行车去
    $obj->getWay(new Bus);      //坐巴士去
    

    相关文章

      网友评论

          本文标题:PHP中的设计模式

          本文链接:https://www.haomeiwen.com/subject/xkhzmxtx.html