回想了一下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. spring security OAuth2.0之客户端Client的实现

    项目代码:https://github.com/hankuikuide/microservice-spring-security-oauth2 网上多数的项目客户端都是采用纯js写,或用postman ...

  2. HTML的条件注释及hack技术

    在很多时候,前端的兼容性问题,都很让人头痛!幸运的是,微软从去年声明:从2016年1月12日起,微软将停止为IE8(包括IE8)提供技术支持和安全更新.整个前端圈子都沸腾起来,和今年七月份Adobe宣 ...

  3. FPGA异步时钟系统中信号处理之单比特信号

    有些东西当你习以为常而不去深思熟虑的时候,致命的错误就会因此埋下!      FPGA开发中难免会遇到跨时钟域处理的问题,而对于单比特信号,我会不假思索的回答:打两拍不久解决了吗?但是事实时,这佯作的 ...

  4. 009-流程控制 for 语句

    流程控制 for 语句 ##################### 语法一 ################################# #!/bin/bash do echo $i done ...

  5. PAT Basic 1036 跟奥巴马一起编程 (15 分)

    美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014 年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个 ...

  6. Educational Codeforces Round 55 (Rated for Div. 2) B. Vova and Trophies (贪心+字符串)

    B. Vova and Trophies time limit per test2 seconds memory limit per test256 megabytes inputstandard i ...

  7. UVa11806 Cheerleaders(容斥原理)

    11806 - Cheerleaders Time limit: 2.000 seconds C Cheerleaders In most professional sporting events, ...

  8. 闲着没事写点啥之springmvc梳理

    用户通过浏览器向服务器发送请求,请求被springmvc的前端控制器dispatcherservlet拦截. dispatcherservlet拦截到请求后,会调用handlermapping处理器映 ...

  9. Git之旅(1):安装git

    一.在windows中安装git git官网:https://git-scm.com/downloads 二.在centos系统安装git 2.1 配置base源和epel源 # cat /etc/y ...

  10. DDD领域驱动设计初探(五):AutoMapper使用

    前言:前篇搭建了下WCF的代码,就提到了DTO的概念,对于为什么要有这么一个DTO的对象,上章可能对于这点不太详尽,在此不厌其烦再来提提它的作用: 从安全上面考虑,领域Model都带有领域业务,让Cl ...