PHP单例模式与工厂模式详解


Posted in PHP onAugust 29, 2017

一、单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的。
所有的单例模式至少拥有以下三种公共元素:

1. 它们必须拥有一个构造函数,并且必须被标记为private
2. 它们拥有一个保存类的实例的静态成员变量
3. 它们拥有一个访问这个实例的公共的静态方法

单例类不能再其它类中直接实例化,只能被其自身实例化。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。 

单例模式实例

<?php
class Single {
  private $name;//声明一个私有的实例变量
  private function __construct(){//声明私有构造方法为了防止外部代码使用new来创建对象。
  
  }
 
  static public $instance;//声明一个静态变量(保存在类中唯一的一个实例)
  static public function getinstance(){//声明一个getinstance()静态方法,用于检测是否有实例对象
   if(!self::$instance) self::$instance = new self();
   return self::$instance;
  }
 
  public function setname($n){ //给变量$name赋值
$this->name = $n; 
 }
  public function getname(){ //取变量$name的值
return $this->name; 
 }
 }
 
 
 $a = Single::getinstance();
 $b = Single::getinstance();
 $a->setname('hello world');
 $b->setname('good morning');
 echo $a->getname();//good morning
 echo $b->getname();//good morning
?>

二、工厂模式就是一种类,具有为您创建对象的某些方法,这样就可以使用工厂类创建对象,而不直接使用new。

这样如果想更改创建的对象类型,只需更改该工厂即可。

<?php
//工厂类(关于运算符的操作)
class factory{
 public static function dx($ope){
  switch($ope){
   case "+":
    return new plus();
    break;
   case "-":
    return new sub();
    break;
   case "%":
    return new rem();
    break;
  }
 }
} 
$ope = factory::dx("+");
$ope->a = 20;
$ope->b = 10;
echo $ope->opera();

工厂模式实例

class Factory {//创建一个基本的工厂类
  static public function fac($id){//创建一个返回对象实例的静态方法
   if(1 == $id) return new A();
   elseif(2==$id) return new B();
   elseif(3==$id) return new C();
   return new D();
  }
 }
 
 interface FetchName {//创建一个接口
  public function getname();//
 }
 
 class A implements FetchName{
  private $name = "AAAAA";
  public function getname(){ 
return $this->name; 
}
 }
 
 class C implements FetchName{
  private $name = "CCCCC";
  public function getname(){
return $this->name; 
}
 }
 class B implements FetchName{
  private $name = "BBBBB";
  public function getname(){ 
return $this->name;
}
 }
 
 class D implements FetchName{
  private $name = "DDDDD";
  public function getname(){ 
return $this->name; 
}
}
 
 
 $o = Factory::fac(6);//调用工厂类中的方法
 if($o instanceof FetchName){
 echo $o->getname();//DDDDD
 }
 
 $p=Factory::fac(3);
 echo $p->getname();//CCCCC
?>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
自己动手做一个SQL解释器
Oct 09 PHP
PHP中文件上传的一个问题
Sep 04 PHP
PHP正确配置mysql(apache环境)
Aug 28 PHP
PHP统计二维数组元素个数的方法
Nov 12 PHP
ThinkPHP的I方法使用详解
Jun 18 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(八)
Jun 23 PHP
linux中cd命令使用详解
Jan 08 PHP
php与Mysql的一些简单的操作
Feb 26 PHP
100行PHP代码实现socks5代理服务器
Apr 28 PHP
php生成毫秒时间戳的实例讲解
Sep 22 PHP
PHP Swoole异步Redis客户端实现方法示例
Oct 24 PHP
如何在Laravel5.8中正确地应用Repository设计模式
Nov 26 PHP
PHP迭代与递归实现无限级分类
Aug 28 #PHP
yii2中LinkPager增加总页数和总记录数的实例
Aug 28 #PHP
PHP大文件分割上传 PHP分片上传
Aug 28 #PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 #PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 #PHP
PHP实现的简单对称加密与解密方法实例小结
Aug 28 #PHP
php检查函数必传参数是否存在的实例详解
Aug 28 #PHP
You might like
php&amp;mysql 日期操作小记
2012/02/27 PHP
yii2.0数据库迁移教程【多个数据库同时同步数据】
2016/10/08 PHP
jquery 双色表格实现代码
2009/12/08 Javascript
jquery $.ajax()取xml数据的小问题解决方法
2010/11/20 Javascript
图片onload事件触发问题解决方法
2011/07/31 Javascript
js仿淘宝和百度文库的评分功能
2016/05/15 Javascript
微信小程序 富文本转文本实例详解
2016/10/24 Javascript
jquery+css3问卷答题卡翻页动画效果示例
2016/10/26 Javascript
JavaScript实现公历转农历功能示例
2017/02/13 Javascript
BootstrapTable加载按钮功能实例代码详解
2017/09/22 Javascript
vue实现鼠标移入移出事件代码实例
2019/03/27 Javascript
layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法
2019/09/25 Javascript
python获取网页状态码示例
2014/03/30 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
2018/04/26 Python
python opencv实现运动检测
2018/07/10 Python
python制作简单五子棋游戏
2019/06/18 Python
Django 1.10以上版本 url 配置注意事项详解
2019/08/05 Python
python多环境切换及pyenv使用过程详解
2019/09/27 Python
Django框架HttpRequest对象用法实例分析
2019/11/01 Python
150行python代码实现贪吃蛇游戏
2020/04/24 Python
python logging 重复写日志问题解决办法详解
2020/08/04 Python
HTML5 canvas基本绘图之绘制矩形
2016/06/27 HTML / CSS
中国最大的名表商城:万表网
2016/08/29 全球购物
Pandora西班牙官方商店:PandoraShop.es
2020/10/05 全球购物
护理专科毕业推荐信
2013/11/10 职场文书
法律进机关实施方案
2014/03/12 职场文书
我们的节日清明节活动总结
2014/04/30 职场文书
热爱祖国演讲稿
2014/05/04 职场文书
环保建议书400字
2014/05/14 职场文书
员工三分钟演讲稿
2014/08/19 职场文书
领导班子群众路线与四风问题对照检查材料思想汇报
2014/10/11 职场文书
元旦主持词开场白
2015/05/29 职场文书
春节晚会开场白
2015/05/29 职场文书
2016年领导干部正风肃纪心得体会
2015/10/09 职场文书
《大禹治水》教学反思
2016/02/22 职场文书
Java 语言中Object 类和System 类详解
2021/07/07 Java/Android