PHP 设计模式总结
回想了一下php的设计模式,好像记得不完全了。此处对php设计模式重新做一下复习总结。
单例模式
单例模式的核心只包括一个特殊的类,保证系统中只能有一个实例,即一个类中只能有一个实例化对象,避免系统中有大量的new操作。
单例模式创建有四个要点:
1、私有化的静态属性(用于保存建立的类的实例对象),
2、私有化 的构造方法(防止从外部new生成对象),
3、私有化的克隆方法(防止外部重过clone(克隆)方法生成对象),
4、公有化的静态方法(调用当前单例类的一个入口。)
<?php
header("Content-type:text/html;charset=utf-8");
class danli{
static private $obj; //私有化的静态属性,保存实例对象 private function __construct(){ //私有化的构造方法
//echo "Is New() Ok";
} private function __clone(){} //私有的克隆方法 static public function getInstanceEntry(){ //公有化的静态方法,外部实例对象的入口 if(!self::$obj instanceof self){ //instanceof判断对象是否实例化
self::$obj = new self(); //或者是new danli()
}
return self::$obj;
} public function getName($nn){
return $nn;
}
} $t = danli::getInstanceEntry();
echo $t -> getName('ABC');
?>
为什么我们需要使用单例模式?
1.php主要在于数据库应用,在应用中必定会进行大量的操作,在面向对象中使用单例模式可以避免大量的new 操作浪费资源。
2.在系统中,使用一个全局类控制配置信息时,使用单例模式会方便的多。
3.进行页面请求时,由于代码语句都在一个类中,会便于调试。
优点:灵活,通用,没有限制死。
缺点:没有完全限制单例效果。
工厂模式
工厂模式:就是一个类,在这个类中是一些创建对象的方法,这样我们就可以使用工厂类去创建对象而不是直接使用new,如果要修改对象类型,直接在工厂类中修改即可。
典型的实现是:工厂模式中的方法几乎都是静态方法。
工厂模式有三种:简单工厂模式、工厂模式、抽象工厂模式
简单工厂模式:实现算法和界面的分离,也就是将业务逻辑和界面逻辑分开了,降低了耦合度。作为一个独立的类,实现了针对不同的算法进行实例化。
算法的封装: 定义一个抽象的算法接口,提供不同算法的公共接口方法。其他具体算法继承这个抽象类,并实现具体的算法。
//简单工厂模式
class gongchang{
static public function fact($n){
if($n == 1) return new A();
elseif ($n == 2) return new B();
elseif ($n == 'c') return new C();
return new de();
}
}
Interface InstanceEntry{
public function getname();
} class A implements InstanceEntry{
private $n = "AAAAAAAA";
public function getname(){return $this->n;}
}
class B implements InstanceEntry{
private $n = "BBBBBBB";
public function getname(){return $this->n;}
}
class C implements InstanceEntry{
private $n = "CCCCCCCC";
public function getname(){return $this->n;}
}
class de implements InstanceEntry{
private $n = "morenjieguo";
public function getname(){return $this->n;}
} $test = gongchang::fact(2);
echo $test->getname();
?>
工厂模式:
定义一个用于创建对象的接口,让子类决定实例化哪一个类。 遵循了开放—封闭原则。专门用来生成对象,外部给个类,内部帮生产,最终返回对象。
抽象工厂模式:
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。最大的特点就是便于两个数据库之间的切换。
PHP 设计模式总结的更多相关文章
- MVVM设计模式和WPF中的实现(四)事件绑定
MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...
- java EE设计模式简介
1.何为设计模式 设计模式提供了对常见应用设计问题的解决方案.在面向对象的编程中,设计模式通常在解决与对象创建和交互相关的问题,而非整体软件架构所面对的大规模问题,它们以样板代码的形式提供了通用的解决 ...
- 计算机程序的思维逻辑 (54) - 剖析Collections - 设计模式
上节我们提到,类Collections中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了第一类,本节我们介绍第二类. 第二类方法大概可以分为两组: 接受其他 ...
- 《JavaScript设计模式 张》整理
最近在研读另外一本关于设计模式的书<JavaScript设计模式>,这本书中描述了更多的设计模式. 一.创建型设计模式 包括简单工厂.工厂方法.抽象工厂.建造者.原型和单例模式. 1)简单 ...
- 《JavaScript设计模式与开发实践》整理
最近在研读一本书<JavaScript设计模式与开发实践>,进阶用的. 一.高阶函数 高阶函数是指至少满足下列条件之一的函数. 1. 函数可以作为参数被传递. 2. 函数可以作为返回值输出 ...
- 设计模式之行为类模式大PK
行为类模式大PK 行为类模式包括责任链模式.命令模式.解释器模式.迭代器模式.中介者模式.备忘录模式.观察者模式.状态模式.策略 ...
- .NET设计模式访问者模式
一.访问者模式的定义: 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作. 二.访问者模式的结构和角色: 1.Visitor 抽象访问者角色,为该 ...
- Java开发中的23种设计模式详解
[放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...
- java 设计模式
目录: 设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计 ...
- 设计模式之单例模式(Singleton)
设计模式之单例模式(Singleton) 设计模式是前辈的一些经验总结之后的精髓,学习设计模式可以针对不同的问题给出更加优雅的解答 单例模式可分为俩种:懒汉模式和饿汉模式.俩种模式分别有不同的优势和缺 ...
随机推荐
- [BZOJ 4332] [JSOI2012]分零食(DP+FFT)
[BZOJ 4332] [JSOI2012]分零食(DP+FFT) 题面 同学们依次排成了一列,其中有A位小朋友,有三个共同的欢乐系数O,S和U.如果有一位小朋友得到了x个糖果,那么她的欢乐程度就是\ ...
- RabbitMq学习2-php命令行模式测试rabbitmq
一.RabbitMQ结构 1.几个概念说明: Broker:简单来说就是消息队列服务器实体. Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列. Queue:消息队列载体 ...
- PHP 堆 栈 数据段 代码段 存储的理解
对象在PHP里面和整型.浮点型一样,也是一种数据类,都是存储不同类型数据用的, 在运行的时候都要加载到内存中去用,那么对象在内存里面是怎么体现的呢? 内存从逻辑上说大体上是分为4段,栈空间段.堆空间段 ...
- 51nod 1963 树上Nim
这题还真就是树上玩 Nim... 相关知识点就是阶梯博弈,具体可以康这里 →_→ PS:手动搜索阶梯博弈 然后这题就转化为了多路径的阶梯博弈,这样的话咱定义根节点深度为 0,然后把所有奇数深度点的权值 ...
- 工作笔记之20170223:①关于Html5的placeholder属性,②以及input的outline:none的样式问题
关于这边几个样式问题,重点有这么几个: (1)placeholder="请输入密码" (2) color:#BEB6B6; border:0px; border-bottom:1p ...
- P3198 [HNOI2008]遥远的行星
传送门 发现 $A$ 不大,又允许较大的误差,考虑乱搞 考虑求出每个位置的答案,因为有 $1e5$ 个位置,所以每个位置差不多可以计算 $100$ 次贡献 所以把每个可以贡献的位置尽量均匀分成 $10 ...
- LeetCode 235. 二叉搜索树的最近公共祖先
235. 二叉搜索树的最近公共祖先 题目描述 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先 ...
- nginx动静分离与网关
当我们请求一个网页的时候,可能会加载很多css,js,img等静态文件:一般这些文件是很久都不会变化的,所以我们为了提高页面响应速度,完全可以将这些文件缓存到浏览器中(可以理解为cookie信息),这 ...
- 使用`html-webpack-plugin`插件配置启动页面
由于使用`--contentBase`指令的过程比较繁琐,需要指定启动的目录,同时还需要修改index.html中script标签的src属性,所以推荐大家使用`html-webpack-plugin ...
- Linux架构之Nginx 动静分离
案例No.51:Nginx动静分离 1.web01配置静态资源 [root@web01 ~]# cd /etc/nginx/conf.d/#配置静态资源[root@web01 conf.d]# cat ...