回想了一下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 设计模式总结的更多相关文章

  1. MVVM设计模式和WPF中的实现(四)事件绑定

    MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  2. java EE设计模式简介

    1.何为设计模式 设计模式提供了对常见应用设计问题的解决方案.在面向对象的编程中,设计模式通常在解决与对象创建和交互相关的问题,而非整体软件架构所面对的大规模问题,它们以样板代码的形式提供了通用的解决 ...

  3. 计算机程序的思维逻辑 (54) - 剖析Collections - 设计模式

    上节我们提到,类Collections中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了第一类,本节我们介绍第二类. 第二类方法大概可以分为两组: 接受其他 ...

  4. 《JavaScript设计模式 张》整理

    最近在研读另外一本关于设计模式的书<JavaScript设计模式>,这本书中描述了更多的设计模式. 一.创建型设计模式 包括简单工厂.工厂方法.抽象工厂.建造者.原型和单例模式. 1)简单 ...

  5. 《JavaScript设计模式与开发实践》整理

    最近在研读一本书<JavaScript设计模式与开发实践>,进阶用的. 一.高阶函数 高阶函数是指至少满足下列条件之一的函数. 1. 函数可以作为参数被传递. 2. 函数可以作为返回值输出 ...

  6. 设计模式之行为类模式大PK

                                        行为类模式大PK 行为类模式包括责任链模式.命令模式.解释器模式.迭代器模式.中介者模式.备忘录模式.观察者模式.状态模式.策略 ...

  7. .NET设计模式访问者模式

    一.访问者模式的定义: 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作. 二.访问者模式的结构和角色: 1.Visitor 抽象访问者角色,为该 ...

  8. Java开发中的23种设计模式详解

    [放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...

  9. java 设计模式

    目录: 设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计 ...

  10. 设计模式之单例模式(Singleton)

    设计模式之单例模式(Singleton) 设计模式是前辈的一些经验总结之后的精髓,学习设计模式可以针对不同的问题给出更加优雅的解答 单例模式可分为俩种:懒汉模式和饿汉模式.俩种模式分别有不同的优势和缺 ...

随机推荐

  1. Monkey学习笔记(一)

    (一)adb相关命令语句: 1. 查看连接设备信息:adb devices 2.安装app到手机上:adb install [-r]  [apk文件存在地址].apk 3.将文件放入设备/模拟器:ad ...

  2. webpack4+vue打包简单入门

    前言 最近在研究使用webpack的使用,在查阅了数篇文章后,学习了webpack的基础打包流程. 本来就可以一删了之了,但是觉得未免有点可惜,所以就有了这篇文章,供大家参考. webpack打包的教 ...

  3. RMQ 模板

    RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为 n的数列A,回答若干次询问RMQ(i,j),返回数列A中下标在区间[i,j]中的最小/大 ...

  4. JavaEE高级-MyBatis学习笔记

    一.MyBatis简介 - MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架. - MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集. - My ...

  5. Nginx优化_数据包头部信息过大问题

    如果客户端发出请求的URL头部信息过大,网站将不能及时响应,并通过状态码414报错. <center><h1>414 Request-URI Too Large</h1& ...

  6. Codeforces 948 数论推导 融雪前缀和二分check 01字典树带删除

    A. 全部空的放狗 B. 先O(NLOGNLOGN)处理出一个合数质因数中最大的质数是多少 因为p1 x1 x2的关系是 x2是p在x1之上的最小倍数 所以x1的范围是[x2-p+1,x2-1]要使最 ...

  7. Manjaro系统和软件安装记录

    Linux桌面环境  ArchLinux官方wiki manjaro官方wiki pacman官方wiki 从www.distrowatch.com可以查看Linux发行版排行榜,可以看到manjar ...

  8. FAT12

    FAT12 is one of FAT file system families,mostly used on 1.44MB floppy disk. FAT 's full name is File ...

  9. 错误消息对话框QErrorMessage

    继承于   QDialog 样式:   这个复选框的作用:文本框中相同信息时是否再显示 import sys from PyQt5.QtWidgets import QApplication, QWi ...

  10. Vue刷新token,判断token是否过期

    1.判断token是否过期,前端请求后,后台会返回一个状态给你.根据状态判断是否过期,刷新token 2.是否每次请求后端都会返回新的token给你.或者后端给你定义了一个刷新token的方法,那此时 ...