设计模式之单例模式与工厂模式
来源:互联网 发布:php邮箱正则表达式 编辑:程序博客网 时间:2024/05/17 00:16
单例模式
概念
单例模式是一种常见的“设计模式”!
什么是设计模式?
所谓的设计模式,并不是一种新的语法,而是人们在实际的应用中面对某种特定的情形而设计出来的某种常见的有效的解决方案,只是经验的总结!
单例就是单一的实例!
如果我们能通过某些技巧从语法上使得一个类只能开辟一个对象空间的话,就可以节省相应的对象资源,这种模式就叫作单例模式!
单例模式的最典型的做法:
也叫作“三私一公”!#单例模式(所谓的“三私一公”思想)#1.私有化一个构造方法,防止类外无限new对象#2.私有化一个静态属性,用于存放类内new出来的那个对象(即单例对象),私有化是为了防止类外的任意修改,静态是因为要通过类访问#3.公开一个静态方法,给类外一个接口,实现单例对象的产生,静态是因为可能还不存在对象,只能通过类访问该方法#4.私有化克隆魔术方法,因为,用户可以无限克隆那个单例对象class Student { private static $instance; private function __construct(){ } public static function getInstance($class_name){ if(!self::$instance instanceof self){ self::$instance = new $class_name; } return self::$instance; } private function __clone(){ }}
工厂模式
概念
也是一种设计模式!
工厂模式的含义就是:设计一个类(此时这个类可以叫作“工厂类”),该类的作用就是帮助其他的类“生产”对象,也就是说,只要传递给这个“工厂”一个类名,就可以得到一个相应的对象!
#工厂模式class Factory { public static function getInstance($class_name){ if(file_exists("./".$class_name.".class.php")){ include "./".$class_name.".class.php"; return new $class_name; }else{ die("系统错误,没有找到相关的类!"); } }}
利用工厂方法,生产单例对象
但是这里的单例,实现的方式并不是“三私一公”!
#利用生产模式,生产一个单例对象class Factory { private static $instance; public static function getInstance($class_name){ if(file_exists("./".$class_name.".class.php")){ include "./".$class_name.".class.php" if(!self::$instance instanceof self){ sele::$instance=new $class_name; } return self::$instance; }else{ die("系统错误,没有找到相关的类!"); } }}
阅读全文
0 0
- 设计模式之简单工厂模式与单例模式
- 设计模式之单例模式与工厂模式
- 设计模式之工厂模式之单例模式
- java 设计模式之单例模式,工厂模式
- java设计模式之单例模式、工厂模式
- 设计模式-单例模式,工厂模式
- 设计模式C#描述之——简单工厂模式、抽象工厂模式、单例与多例模式
- 设计模式C#描述之——简单工厂模式、抽象工厂模式、单例与多例模式
- 设计模式之工厂模式、抽象工厂模式、单例模式(C++代码)
- 设计模式之工厂模式、抽象工厂模式、单例模式(C++代码)
- 设计模式三大基础模式之工厂模式,单例模式,注册树模式
- PHP设计——单例模式与工厂模式
- java设计模式之单例,工厂,代理模式
- 单例、工厂设计模式
- 设计模式 单例模式 简单工厂
- 单例设计模式,简单工厂模式
- 设计模式(工厂模式、单例模式、模板模式)
- 设计模式【工厂模式】【单例模式】【装饰者模式】
- G
- usaco 1.2 Milking Cows
- Android异步消息机制-深入理解Handler、Looper和MessageQueue之间的关系
- HashMap的工作原理
- 运算符优先级
- 设计模式之单例模式与工厂模式
- Android 如何自定义一个ContentProvider
- Android View系列代码问题(一)
- URI和URL
- cmd可以链接mysql,但是mysql-front/navicat 1045错误解决方法
- ASP.NET 动态加载用户控件 通过委托响应onclick事件
- Disable Gradle 'offline mode' and sync project
- 10.14 考试 T1 计数
- hdu5573Binary Tree 思维构造