PHP设计——单例模式与工厂模式
一、单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的。
所有的单例模式至少拥有以下三种公共元素:
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设计——单例模式与工厂模式的更多相关文章
- PHP模式设计之单例模式、工厂模式、注册树模式、适配器模式、观察者模式
		
php模式设计之单例模式 什么是单例模式? 单例模式是指在整个应用中只有一个实例对象的设计模式 为什么要用单例模式? php经常要链接数据库,如果在一个项目中频繁建立连接数据库,会造成服务器资源的很大 ...
 - PHP 面向对象编程和设计模式 (3/5) - 单例模式和工厂模式
		
PHP高级程序设计 学习笔记 2014.06.11 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容 ...
 - 10月27日PHP加载类、设计模式(单例模式和工厂模式)、面向对象的六大原则
		
加载类可以使用include.require.require_once三种中的任意一种,每个关键字都有两种方法,但是这种方法的缺点是需要加载多少个php文件,就要写多少个加载类的方法.一般也就需要加载 ...
 - php部分---面向对象,设计模式(单例模式、工厂模式)、oop六大原则;
		
一.单例模式目的:为了控制对象的数量(只能够有一个,相当于类的计划生育)做法1.将类的构造函数做成私有的2.在类里面做了一个公有的函数来造对象3.将该函数变为静态的4.在函数里面加控制 class R ...
 - iOS中的事件响应链、单例模式、工厂模式、观察者模式
		
学习内容 欢迎关注我的iOS学习总结--每天学一点iOS:https://github.com/practiceqian/one-day-one-iOS-summary iOS中事件传递和相应机制 i ...
 - php单例模式与工厂模式
		
单例模式:单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的. 所有的单例模式至少拥有以下三种公共元素:1. 它们必须拥有一个构造函数,并且必须被标记 ...
 - 【php】单例模式和工厂模式
		
单例模式:防止重复实例化,避免大量的new操作,减少消耗系统和内存的资源,使得有且仅有一个实例对象 header("Content-type: text/html; charset=utf- ...
 - js的数据类型:单例模式,工厂模式,构造函数
		
js数据类型 基本数据类型:string undefined null boolean number 引用数据类型 Object array function 二者的区别 基本数据类 ...
 - php 单例模式和工厂模式
		
单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的.所有的单例模式至少拥有以下三种公共元素:1. 它们必须拥有一个构造函数,并且必须被标记为priva ...
 
随机推荐
- 牛客练习赛40 A 小D的剧场 (思维dp)
			
链接:https://ac.nowcoder.com/acm/contest/369/A 题目描述 若你摘得小的星星 你将得到小的幸福 若你摘得大的星星 你将得到大的财富 若两者都能摘得 你将得到 ...
 - css 圆形头像
			
方法一:背景图片(推荐) 好处是,图片长宽不等的情况下图片不会变形 .ui-photo { width: 100px; height: 100px; background: url("img ...
 - 如何查看本地电脑ip
			
1.快捷键 win+R打开命令窗口 输入 ipconfig查看你电脑的ip 2.输入netstat -an ,查看当前所有连接端口,显示所有的有效连接信息列表,包括已建立的连接(ESTABLISHED ...
 - 判断JDK安装成功的方法
			
JDK安装成功之后,主要是要写入环境变量
 - PHP开发APP接口之返回数据
			
首先说明一下客户端APP通信的格式 1.xml:扩展标记语言(1.用来标记数据,定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言,xml格式统一,跨平台和语言,非常适合数据传输和通信,早已 ...
 - curl 出现错误的调试方法
			
private function httpGet($url) { $curl = curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, tru ...
 - 线程相关函数(1)-pthread_create(), pthread_join(), pthread_exit(), pthread_cancel() 创建取消线程
			
一. pthread_create() #include <pthread.h> int pthread_create(pthread_t *thread, const pthread_a ...
 - (链表 递归) leetcode 24. Swap Nodes in Pairs
			
Given a linked list, swap every two adjacent nodes and return its head. You may not modify the value ...
 - ZooKeeper集群详细安装教程
			
1. 安装JDK 1.1 官网下载JDK 进入网址<a href="http://www.oracle.com/technetwork/java/javase/downloads/jd ...
 - 6.Django Admin学习
			
##创建超级用户 python manage.py createsuperuser 英文界面换成中文: 修改setting.py zh_Hans ##后台显示数据 django requets get ...