回想了一下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. CVE-2016-8655,af_packet Linux 內核通殺提權漏洞淺析

    簡單寫一下思路 這個東西需要namespace方面的支援, 首先open socket , 一連串路徑(packet_set_ring()->init_prb_bdqc()->prb_se ...

  2. nodejs版实现properties后缀文件解析

    1.propertiesParser.js let readline = require('readline'); let fs = require('fs'); // properties文件路径 ...

  3. MFC- 网络编程

    一.MFC网络编程 a)CAsyncSocket用于异步非阻塞类,用UDP通信: b)CAsyncSocket的子类(派生类):Csocket同步阻塞类,用于TCP通信: c)通信前,必须调用AfxS ...

  4. idea无法使用注解@Data解决方法

    @Data相关依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lomb ...

  5. Apache 配置外网站点

    基于域名,一般是对外网站 www.etiantian.org/var/www/html/www blog.etiantian.org /var/www/html/blog bbs.tiantian.o ...

  6. ARM Cortex-M底层技术(1)—程序在Flash和SRAM的空间分配

    1. keil编译介绍 当使用keil进行单片机的开发时,运行一段程序后,在output输出框会看到如下图的结果. 图1 keil 的output框 其中,Compiler编译器,使用的版本是 V5. ...

  7. 第二节,下载openwrt源码和编译环境

    文章的开始先说两个重点 1.不要使用root用户编译,普通用户编译即可. 2.自行搭建梯子,以免编译失败. 一,进入虚拟机内的Ubuntu系统 点击左下角的显示应用程序,我们去修改一下Ubuntu的源 ...

  8. deletefile 与KILL

    1.Kill 语句 从磁盘中删除文件.语法Kill pathname必要的 pathname 参数是用来指定一个文件名的字符串表达式.pathname 可以包含目录或文件夹.以及驱动器.说明在 Mic ...

  9. 牛客练习赛33 E tokitsukaze and Similar String (字符串哈希hash)

    链接:https://ac.nowcoder.com/acm/contest/308/E 来源:牛客网 tokitsukaze and Similar String 时间限制:C/C++ 2秒,其他语 ...

  10. QKeyEvent

    #include<QKeyEvent>键盘事件由两个重载函数,实现即可:  void keyReleaseEvent(QKeyEvent *event);  void keyPressEv ...