PHP之设计模式(二)---基础篇
来源:互联网 发布:7.62口径秃鹰数据 编辑:程序博客网 时间:2024/06/06 20:39
本篇博客主要是讲集中基础的设计模式:
1,工厂模式
2,单例模式
3,注册模式
一,工厂模式
我们可以设计出来一个工厂(其实就是类),该工厂的作用就是为我们生产各种对象。这种工厂通常只要指定类名,就可以据此获取
<?phpnamespace Shulv;class Factory{ //Instance表示“实例”,也就是指“对象” static function getInstance($className){//将要实例化的类名传递过来 if(file_exists('./'.$className.'.class.php')){ $obj1 = new $className(); return $obj1; }else{ return 'not exist'; } }}
二,单例模式
对于某些类,在使用它的时候,从头到尾(从程序的开始到结束),都只需要一个对象,就可以完成所有的人物
* 单例:
* 某个类只允许创建出一个对象,即使去创建多次,也只能得到一个对象(就比如创建一个连接数据库的对象,前前后后只要创建一个就行)
//实现一个单例类:其只能获得一个对象class B{ private static $instance;//定义成私有,那么它只能在本类中使用。定义成静态就能通过类名来访问了 private function __construct(){}//定义成私有,也就是不让别人在类外new 出对象,这样就只能通过getNew()获取对象 public static function getNew(){ //如果本类中的$instance还没有数据 if(!isset(B::$instance)){ B::$instance = new self; } return B::$instance; } private function __clone() { }}$o1 = B::getNew();$o2 = B::getNew();//我们会发现这创建的还是一个类(资源标识符相同)//var_dump($o1,$o2);//下面我们再看一下一个特殊情况$o3 = clone $o1;//克隆对象(当我把那个__clone()方法定义成私有,这句就会报错)var_dump($o1,$o2,$o3);//这个时候我们会发现$o3是一个新对象了 这个时候又不符合单例了(注意:这个clone算运算符)/* *本来一个类中有一个隐藏的public function __clone()方法,那我们如果想实现单例,我们给它定义成私有就行,不让他在类外使用 */
三,注册模式
全局共享和交换对象
<?phpnamespace Shulv;/*注册模式就是用来将一些对象注册到我们的全局事物上边,那就可以在任意位置访问*/class Register{ protected static $objects; function set($alias, $object){//表示将一个对象注册到全局的注册树上 self::$objects[$alias] = $object;//第一个参数表示取的别名 } function _unset($alias){//注意:这个_unset()不是魔术方法,魔术方法那个是__unset()(两个下划线) //表示从树上移除 unset(self::$objects[$alias]); } function get($name){ return self::$objects[$alias]; }}//当我们在工厂模式中获得对象之后,再将获得的对象映射到全局树上,那么工厂模式就只用构造一次Register::set('A',$a);//A是别名(加在工厂模式中)
阅读全文
1 0
- PHP之设计模式(二)---基础篇
- 大话设计模式之面向对象基础篇(二)
- 【设计模式】之装饰器模式(二)-PHP
- php设计模式 (二)之工厂模式
- PHP 设计模式(二)
- PHP设计模式(二)
- Php设计模式之工厂模式(二)【工厂方法模式 Factory Method】
- Php设计模式之工厂模式(二)【工厂方法模式 Factory Method】
- php设计模式之二__单例模式
- [Android基础系列]设计模式(二)
- 基础笔记(二):设计模式摘录
- 设计模式之设计原则(二)
- 可复用面向对象软件基础——设计模式(二)之工厂方法模式
- 设计模式之行为模式(二)
- 设计模式之状态模式(二)
- 设计模式之观察者模式(二)
- 设计模式之(二)Adapter模式
- 设计模式之观察者模式(二)
- PyCharm:Error running xxx: Cannot run program "D:\Python27\python.exe"
- 算法与数据结构---选择排序
- Android 代码混淆技术总结
- 学会如何使用移动用户反馈系统,让你玩转APP
- 算法与数据结构---插入排序
- PHP之设计模式(二)---基础篇
- C++ 高性能服务器网络框架设计细节
- 数据报告制作
- Linux下安装Tomcat服务器和部署Web应用
- PHP连接SQL SERVER 数据库 PHP连接MYSQL数据库并解决中文乱码问题。
- CAS单点登录-密码管理(十三)
- 【MySQL】查看mysql实时运行sql的工具–orztop
- virsh通过xml 创建虚拟机
- Java并发(5)深入分析java线程池框架及实现原理(二)