php简单实现单态设计模式的方法分析
本文实例讲述了php简单实现单态设计模式的方法。分享给大家供大家参考,具体如下:
单态设计模式通常包含以下三点:
· 一个私有的 构造方法;(确保用户无法通过创建对象对其进行实例化)
· 一个公有的 静态的 方法;(负责对其本身进行实例化)
· 一个私有的 静态的 属性;(用于保存仅有的一个实例化对象)
<?php class singleTon{ //用于保存仅有的一个实例化对象 private static $Instance=NULL; //构造方法 使用private 封装后 则只能在类的内部使用new去创建对象 private function __construct(){}; //只有通过这个方法才能返回本类中的对象,该方法是静态方法 用类名调用 public static getInstance(){ if(self::$Instance instanceof self){ //如果本类中的$Instance为空,说明还没有被实例化过 self::$Instance=new singleTon(); //实例化本对象 } return self::$Instance; } } $instance=singleTon::getInstance(); //只能使用静态方法getInstance()去获取singleTon类的对象 ?>
所谓的单态设计模式就是一个类只能产生/创建唯一一个对象
要编写单态设计模式,就必须让一个类只能实例化一个对象,而要想让一个类只能实例化一个对象,就要先让一个类不能实例化对象
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP基本语法入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
相关推荐
-
php设计模式 Singleton(单例模式)
复制代码 代码如下: <?php /** * 单例模式 * * 保证一个类仅有一个实例,并提供一个访问它的全局访问点 * */ class Singleton { static private $_instance = null; private function __construct() { } static public function getInstance() { if(is_null(self::$_instance)) { self::$_instance = new Singl
-
php设计模式 Proxy (代理模式)
代理,指的就是一个角色代表另一个角色采取行动,就象生活中,一个红酒厂商,是不会直接把红酒零售客户的,都是通过代理来完成他的销售业务.而客户,也不用为了喝红酒而到处找工厂,他只要找到厂商在当地的代理就行了,具体红酒工厂在那里,客户不用关心,代理会帮他处理. 代理模式,就是给某一对象提供代理对象,并由代理对象控制具体对象的引用. 代理模式涉及的角色: 抽象主题角色,声明了代理主题和真实主题的公共接口,使任何需要真实主题的地方都能用代理主题代替. 代理主题角色,含有真实主题的引用,从而可以在任何时候操
-
PHP设计模式之工厂模式与单例模式
本文实例讲述了PHP设计模式之工厂模式与单例模式实现方法.分享给大家供大家参考,具体如下: 设计模式简单说应对某类问题而设计的解决方式 工厂模式:应对需求创建相应的对象 class factory{ function __construct($name){ if(file_exists('./'.$name.'.class.php')){ return new $name; }else{ die('not exist'); } } } 单例模式:只创建一个对象的实例,不允许再创建实例,节约资源(
-
php单态设计模式(单例模式)实例
单态设计模式也叫单例模式: 1.单态设计模式含义: 单态模式的主要作用是保证在面向对象编程设计中,一个类只能有一个实例对象存在.作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例.它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用. 2.单台模式的三个关键点: ① 需要一个保存类的唯一实例的静态成员变量: ②构造函数和克隆函数必须声明为私有的,防止外部程序new类从而失去单例模式的意义: ③必须提供一个访问这个实例的公共的静态方法(通常为
-
php设计模式 Interpreter(解释器模式)
复制代码 代码如下: <?php /** * 解释器 示例 * * @create_date: 2010-01-04 */ class Expression { function interpreter($str) { return $str; } } class ExpressionNum extends Expression { function interpreter($str) { switch($str) { case "0": return "零"
-
学习php设计模式 php实现单例模式(singleton)
保证一个类仅有一个实例,并且提供一个访问它的全局访问点. 单例模式有三个特点: 1.一个类只有一个实例 2.它必须自行创建这个实例 3.必须自行向整个系统提供这个实例 一.单例模式结构图 二.单例模式中主要角色 Singleton 定义一个Instance操作,允许客户访问它的唯一实例.Instance是一个类方法.负责创建它的唯一的实例. 三.单例模式的优点 1.对唯一实例的受控访问 2.缩小命名空间 单例模式是对全局变量的一种改进.它避免了那些存储唯一实例的全局变量污染命名空间 3.允许对操
-
PHP最常用的2种设计模式工厂模式和单例模式介绍
1.工厂模式 主要作用是降低耦合度. 复制代码 代码如下: abstract class Operation{ abstract public function getValue($num1,$num2); public function getAttr(){ return 1; } } class Add extends Operation{ public function getValue($num1, $num2){ return $num1+$num2; } } class Sub ex
-
PHP常用的三种设计模式汇总
本篇文章是学习PHP中常用的三种设计模式的笔记及总结,不管采用哪一门语言开发什么,几乎都会使用到设计模式,我们为什么需要设计模式呢?它的诞生对于我们开发人员来说有什么样的作用与意义呢? 相信做iOS开发的人员对设计模式也会挺熟悉吧?比如单例设计模式.工厂设计模式.观察者模式.MVC框架结构设计模式等. 接下来我们一起来学习PHP中最常用的三种设计模式:单例设计模式.工厂设计模式和观察者设计模式. 单例设计模式 所谓单例模式,即在应用程序中最多只有该类的一个实例存在,一旦创建,就会一直存在于内存中
-
php设计模式 Strategy(策略模式)
抽象策略(Strategy)角色:定义所有支持的算法的公共接口.通常是以一个接口或抽象来实现.Context使用这个接口来调用其ConcreteStrategy定义的算法. 具体策略(ConcreteStrategy)角色:以Strategy接口实现某具体算法. 环境(Context)角色:持有一个Strategy类的引用,用一个ConcreteStrategy对象来配置 核心代码 <?php interface Strategy { // 抽象策略角色,以接口实现 public functio
-
php设计模式 DAO(数据访问对象模式)
复制代码 代码如下: <?php /** * 数据访问对象(Data Access Object) 示例 * * @create_date: 2010-01-04 */ class BaseDAO { var $_db = null; var $_table = null; function BaseDAO($config) { $this->_db = new MysqlDB(); // 这里的不能进行操作 } /** * 获取处理 * * @param array $filter // 过
-
php设计模式 Facade(外观模式)
模式定义:外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.外观模式又称为门面模式,它是一种对象结构型模式. 模式结构: 外观模式的就是让client客户端以一种简单的方式来调用比较复杂的系统,来完成一件事情. Subsystem: 复制代码 代码如下: class car { public function start() { print_r("
-
php设计模式 Template (模板模式)
继承关系由于自身的缺陷,被专家们扣上了"罪恶"的帽子."使用委派关系代替继承关系","尽量使用接口实现而不是抽象类继承"等等专家警告,让我们这些菜鸟对继承"另眼相看".其实,继承还是有很多自身的优点所在.只是被大家滥用的似乎缺点更加明显了.合理的利用继承关系,还是能对你的系统设计起到很好的作用的.而模板方法模式就是其中的一个使用范例. GOF给模板方法(Template Method)模式定义一个操作中的算法的骨架,而将一些步
随机推荐
- 在DIV+CSS排版中新闻列表的制作方法
- iOS设置圆角的三种方式
- iOS 原生实现扫描二维码和条形码功能限制扫描区域
- 微信小程序 引入es6 promise
- 原生JS封装Ajax插件(同域、jsonp跨域)
- .NET 水晶报表使用代码
- php随机显示指定文件夹下图片的方法
- 让你同时上传 1000 个文件 (二)
- php数组中包含中文的排序方法
- Material Design系列之Behavior实现Android知乎首页
- 用CSS给图片打标的方法
- JSP的相对路径如何计算深入研究
- 简单分析javascript面向对象与原型
- ASP.NET 图片加水印防盗链实现代码
- jQuery封装的tab选项卡插件分享
- json与jsonp知识小结(推荐)
- IE6/7/8/9不支持exec的简写方式
- Bootstrap 网格系统布局详解
- Linux下安装与使用MySQL详细介绍
- 浅谈java反射和自定义注解的综合应用实例