设计模式

单例模式:一个类只能有一个对象

我们都知道 创建对象有两种方法, 第一种是new  实例化  第二种是clone  克隆

三私一公   私有的属性保存对象,私有构造函数 阻止实例化,私有克隆模式  阻止克隆对象,公有方法创建对象

<?php
    /**
     * 
     * 作用:单例模式  一个类只能有一个对象
     * 应用场景:多数应用数据库的连接
     * 说明:
     * 1.因为只能有一个对象,需要私有化构造函数.
     * 2.构造函数私有化,说明类不能实例化,需要使用静态属性和方法
     */
    class DB{

        //静态属性
        private static $conne_link;
        //私有化构造函数
        private function __construct(){
            
        }
        //创建对象
        public static function newObj(){
            //判断静态属性保存是否是当前的对象,如果不是就创建并返回
            if(!self::$conne_link instanceof self){
                return self::$conne_link=new self();
            }
                return self::$conne_link;
        }

        private function __clone(){
            
        }

    }

    $link1=DB::newObj();
    $link2=DB::newObj();

    var_dump($link1,$link2);

工厂模式:传递不同的参数,产出不同的对象

<?php 
    /**
     * 作用:传递不同的参数,创建不同的对象
     * 说明:在gongchang类中,创建方法来创建对象
     */
    class gongChang{

        function create($obj=null){
            switch($obj){
                case 1: 
                    return new huateng();
                    break;
                case 2:
                    return new xiangshang();
                    break;
                default :
                    return "空对象";
            }
        }
    }
    //类1
    class huaTeng{

    }
    //类2
    class xiangshang{

    }

    $obj= new gongChang();
    $str1=$obj->create(1);  //huateng对象
    $str2=$obj->create(2);  //xiangshang对象
    $str3=$obj->create();   //空对象
    var_dump($str1,$str2,$str3);
<?php

    //fash 类
    class fash{
        function show(){
            echo '我会游';
        }
    }
    //fly类
    class fly{
        function show(){
            echo "我会飞";
        }
    }


    //策略类,根据出啊目的不同的对象,实现不同的方法
    class policy{
        public function pShow($obj){
            $obj->show();
        }
}

$a = new policy();

//传递 fash类就调用fash类中的show方法
$a->pShow(new fash());
//传递 fly类 就调用fly类中的show方法
$a->pshow(new fly());
原文地址:https://www.cnblogs.com/xiaowie/p/14280946.html