设计模式
单例模式:一个类只能有一个对象
我们都知道 创建对象有两种方法, 第一种是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());