27岁,山西运城人,职业电商经理人,前端开发工作者,从事过网站建设、网络推广、SEO、SEM、信息流推广、二类电商、网络运维、软件开发,等相关电商工作,经验较为丰富,小米技术社区致力于为广大从事Web前端开发的人员提供一些力所能及的引导和帮助 ...[更多]
E-mail:mzze@163.com
Q Q:32362389
W X:xiaomi168527
27岁,山西运城人,职业电商经理人,网络工程师兼运维,从事过运营商网络建设,企业网络建设、优化。数据中心网络维护等通过,经验丰富,座右铭:当自己休息的时候,别忘了别人还在奔跑。 ...[更多]
大于花一样的年龄,河南郑州是我家,2010年在北京接触团购网,2011年进入天猫淘宝一待就是四年,如今已经将设计走向国际化(ps:误打误撞开始进入阿里巴巴国际站的设计,嘿嘿)五年电商设计,丰富经验,从事过天猫淘宝阿里各项设计,店铺运营,产品拍摄;我将我的经历与您分享是我的快乐!座右铭:越努力越幸运! ...[更多]
E-mail:97157726@qq.com
Q Q:97157726
PHP的设计模式有单例模式和工厂模式、策略模式。
特点:一个类只能有一个对象
应用场景:多次请求数据库只需要一个连接对象。
实现:三私一公
1、私有的静态属性用来保存对象的单例 2、私有的构造方法用来阻止在类的外部实例化 3、私有的__clone阻止在类的外部clone对象 4、公有的静态方法用来获取对象的单例
单例模式案例:
<?php //三私一公 class DB { //静态的属性用来保存对象的单例 private static $instance; //私有的构造方法阻止在类的外部实例化 private function __construct() { } //私有的__clone()阻止在类的外部clone对象 private function __clone() { } public static function getInstance() { //保存的值不属于DB类的类型就实例化 if(!self::$instance instanceof self) self::$instance=new self(); return self::$instance; } } //测试 $db1=DB::getInstance(); $db2=DB::getInstance(); var_dump($db1,$db2); //object(DB)#1 (0) { } object(DB)#1 (0) { }
特点:传递不同的参数获取不同的对象
<?php class ProductsA { } class ProductsB { } //工厂模式 class ProductsFactory { public function create($num) { switch($num) { case 1: return new ProductsA; case 2: return new ProductsB; default: return null; } } } //测试 $factory=new ProductsFactory(); $obj1=$factory->create(1); $obj2=$factory->create(2); var_dump($obj1,$obj2); //object(ProductsA)#2 (0) { } object(ProductsB)#3 (0) { }
特点:传递不同的参数调用不同的策略(方法)
<?php class Walk { public function way() { echo '走着去<br>'; } } class Bus { public function way() { echo '坐车去<br>'; } } //策略模式 class Student { public function play($obj) { $obj->way(); } } //测试 $stu=new Student; $stu->play(new Walk()); //走着去 $stu->play(new Bus()); //坐车去
本站内容均为小米原创,转载请注明出处:小米技术社区>> PHP的设计模式,单例模式和工厂模式、策略模式