美文网首页
设计模式

设计模式

作者: 空留灯半盏 | 来源:发表于2018-06-25 16:50 被阅读0次

    设计模式

    1 . 单例模式

    /**
    三私一公
    *私有的静态属性:保存类的单例
    *私有的__construct():阻止在类的外部实例化
    *私有的__clone():阻止在类的外部clone对象
    *共有的静态方法:获取类的单例
    */
    class MySQLDB {
        private static $instance;   //保存类的单例
        private function __construct() {    //阻止在类的外部实例化
        }
        private function __clone() {    //阻止在类的外部clone对象
        }
        //获取当前类的单例
        public static function getInstance() {
            if(!self::$instance instanceof self)//$instance中保存的不是MySQLDB类的单例就实例化
                self::$instance=new self();
            return self::$instance; //返回单例
        }
    }
    //测试
    $db1=MySQLDB::getInstance();
    $db2=MySQLDB::getInstance();
    var_dump($db1,$db2);
    

    特点:

    1\ 一个类只能有一个对象
    2\ 实现三私一共
    3\ instanceof:判断对象是否是类数据类型

    2 . 工厂模式

    特点:

    传递不同的参数获取不同的对象
    <?php
    class ProductsA {
        public function show() {
            echo '商品A<br>';
        }
    }
    class ProductsB {
        public function show() {
            echo '商品B<br>';
        }
    }
    //工厂模式
    class ProductsFactory {
        public static function create($num) {   //传递不同的参数获取不同的对象
            switch($num) {
                case 1:
                    return new ProductsA;
                case 2:
                    return new ProductsB;
                default:
                    return null;
            }
        }
    }
    //测试
    $obj1= ProductsFactory::create(1);
    $obj2= ProductsFactory::create(2);
    $obj1->show();      //商品A
    $obj2->show();      //商品B
    

    3 . 策略模式

    特点:

    传递不同的参数,调用不同的方法;
    <?php
    class Walk {
        public function method() {
            echo '走着去<br>';
        }
    }
    class Bus {
        public function method() {
            echo '坐车去<br>';
        }
    }
    class Strategy {
        public function way($obj) { 
            $obj->method(); //传递不同的参数调用不同的方法
        }
    }
    //测试
    $strategy=new Strategy();
    $strategy->way(new Walk); //走着去
    $strategy->way(new Bus); // 坐车去
    

    相关文章

      网友评论

          本文标题:设计模式

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