资讯专栏INFORMATION COLUMN

PHP设计模式总结

zxhaaa / 723人阅读

摘要:总结工厂类必须有一个工厂方法工厂方法必须能够返回一个其他类的实例一次只能创建和返回一个实例三设计模式汇总设计模式汇总相关文章设计模式之单例模式的一个技术栈后端猿的知识储备大纲设计模式之工厂模式单例模式注册树模式

</>复制代码

  1. Learning PHP Design Patterns.设计模式的宗旨就是重用,应用设计模式可以使我们的代码更加优雅、简洁、低耦合。

一、单例模式 1.什么是单例模式:

一个类最多只能产生一个对象,如果希望在系统中某个类(链接数据库的类)的对象只能存在一个,单例模式是最好的解决方案。

2.单利模式的实现:三私一公

①私有化构造方法:防止实例化
②私有化克隆方法:防止克隆
③私有化静态属性:保存对象
④私有化静态方法:获取对象

3.代码实现

</>复制代码

  1. class Singleton{
  2. private static $obj;//私有化静态属性
  3. private function __construct(){
  4. //私有化构造方法
  5. }
  6. private function __clone(){
  7. //私有化克隆方法
  8. }
  9. //静态方法产生对象
  10. static public function getInstance(){
  11. //对象不存在new一个对象
  12. if(!is_object(self::$obj)){
  13. self::$obj = new Singleton();
  14. }
  15. return self::$obj;
  16. }
  17. }
4.测试单例模式

</>复制代码

  1. //无法实例化,可以防止new实例化这个类,强制使用getInstance方法,创建对象
  2. $obj1 = new Singleton;
  3. var_dump($obj1);
  4. //成功获取对象
  5. $obj2 = Singleton::getInstance();
  6. var_dump($obj2);
  7. //无法克隆
  8. $obj3 = clone $obj2;
  9. var_dump($obj3);
二、工厂模式

这也是一个很基本,很简单,很常用的设计模式。

本来我们要获取一个类的实例,需要用到new关键字。但是如果new 直接写到业务代码里,一个类在很多地方都实例化过,以后要是这个类出了什么问题,比如要改个名字(实际中,你更多的可能是修改构造函数方法),那么就尴尬了,需要改很多地方。

工厂模式,顾名思义,就是不用new来获得实例,而是把业务类放进一个工场类里,由工厂(类)『生产』出对应的实例

实现

SimpleFactory.php

</>复制代码

  1. Bicycle.php

  2. </>复制代码

    1. 使用
    2. </>复制代码

      1. $factory = new SimpleFactory();
      2. $bicycle = $factory->createBicycle();
      3. $bicycle->driveTo("Paris");
    3. 我们需要什么样的实例,就到工厂的实例方法里去拿。这里只定义了一个类的实例,你可以定义更多。

    4. 我们看到,业务代码里没有出现 new以及那个具体的业务类, 这样 业务类(class Bicycle)我们可以随便改,以后更新的时候只要在工厂类(class SimpleFactory)里修改一次,就可以一对多的在各处生效了。

    5. 但是,这个方法名字 $factory->createBicycle(); 你得起好,如果你要改这个名字,还是得到多个地方改的。
      工厂的作用,简而言之,就是在工厂里边创建业务需要的实例对象,然后,在业务层创建工厂对象调用里边相关的创建对象方法即可。

    6. 总结
    7. 工厂类必须有一个工厂方法;

    8. 工厂方法必须能够返回一个其他类的实例;

    9. 一次只能创建和返回一个实例;

    10. 三、PHP设计模式汇总
    11. PHP设计模式汇总

    12. 相关文章:
      php设计模式之单例模式
      TIGERB的:一个php技术栈后端猿的知识储备大纲
      php 设计模式之工厂模式、单例模式、注册树模式

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22189.html

相关文章

  • php设计模式

    摘要:我们今天也来做一个万能遥控器设计模式适配器模式将一个类的接口转换成客户希望的另外一个接口。今天要介绍的仍然是创建型设计模式的一种建造者模式。设计模式的理论知识固然重要,但 计算机程序的思维逻辑 (54) - 剖析 Collections - 设计模式 上节我们提到,类 Collections 中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了...

    Dionysus_go 评论0 收藏0
  • php设计模式

    摘要:我们今天也来做一个万能遥控器设计模式适配器模式将一个类的接口转换成客户希望的另外一个接口。今天要介绍的仍然是创建型设计模式的一种建造者模式。设计模式的理论知识固然重要,但 计算机程序的思维逻辑 (54) - 剖析 Collections - 设计模式 上节我们提到,类 Collections 中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了...

    vspiders 评论0 收藏0
  • php之道》读后总结 php学习纲要

    摘要:日期和时间使用类完成读取设置比较和计算日期与时间。单元测试单元测试是从编写开始,贯穿于整个开发周期的一种用于保证函数类和方法的行为与预期一致的编程方法。是应用的单元测试框架的业界标准,其他几个可选框架是行为驱动开发行为驱动开发有两种方式和。 《php之道》阅读地址:http://wulijun.github.io/php-the-right-way/#code_style_guide ...

    gitmilk 评论0 收藏0
  • 个人建议之PHP面试的准备

    摘要:个人也建议不要满足于自己当下所知道的,多去拓展自己,多去学新的东西。作为一个面试者来说,知识点的记忆准备为的是更好的应对面试中技术面中问到的各种问题。 你好,是我琉忆——PHP程序员面试笔试系列图书的作者。 随着越来越多的人开始迈入PHP开发工程师的队列,不管是一个PHP新手还是一个有一两年开发经验的PHPer都不得不去面对找工作前面试这件事。 我现在以个人对面试的经历和见解来全面的对...

    macg0406 评论0 收藏0
  • Laravel - Artisan 个人常用总结

    摘要:通过输入任何错误的命令行,均可获得类似单词的正确命令行。倘若您对本文有兴趣,建议常用,以便最快获得结果。并没有看到任何优雅之处。表单请求验证器事件一句话简述简单实现的观察者模式设计模式的一种。表单请求验证器在下添加事件和监听器。 通过输入任何错误的 Artisan 命令行,均可获得类似单词的 Artisan 正确命令行。倘若您对本文有兴趣,建议常用 Ctrl+F,以便最快获得结果。并没...

    CKJOKER 评论0 收藏0

发表评论

0条评论

zxhaaa

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<