A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小鲁哥哥 黑马粉丝团   /  2017-8-23 11:13  /  1806 人查看  /  0 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小鲁哥哥 于 2017-8-23 11:20 编辑

PHP中的设计模式

设计模式
      今天为大家带来的是PHP中的设计模式,首先让我们了解一下什么是设计模式。
什么叫设计模式?
      在面向对象编程领域,解决一些典型问题的典型做法的经验总结(代码模式);
      使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。

      了解完了什么是设计模式后,接下来我就为大家分享两种常用的设计模式:工厂模式和单例模式。

工厂模式:
需求:
      请设计一个类,该类有一个方法,能够做到这种效果:
      给该方法传入一个类名,则该方法就可以返回这个类的对象。
      就像一个“塑料制品”工厂:给它一个某种产品的“模具”,就可以生产该模具对应的塑料产品。
[PHP] 纯文本查看 复制代码
<?php
/*传智播客济南校区*/
/*
*需求:
*请设计一个类,该类有一个方法,能够做到这种效果:
*给该方法传入一个类名,则该方法就可以返回这个类的对象
*/
class Factory{
         //声明一个静态方法
         static function GetObjectByClassName($class_name){
                  //实例化这个类
                  $obj = new $class_name();
                  //返回这个类对应的对象
                  return $obj;
         }
}
class A{}
class B{}
class C{}

//实例化对象
$obj1 = Factory::GetObjectByClassName("A");
$obj2 = Factory::GetObjectByClassName("A");
$obj3 = Factory::GetObjectByClassName("B");
$obj4 = Factory::GetObjectByClassName("C");
$obj5 = Factory::GetObjectByClassName("B");

//将实例化后的对象打印出来

var_dump($obj1);
var_dump($obj2);
var_dump($obj3);
var_dump($obj4);
var_dump($obj5);

得到结果:

object(A)#1 (0) {}
object(A)#2 (0) {}
object(B)#3 (0) {}
object(C)#4 (0) {}
object(A)#5 (0) {}

通过结果我们可以看出来我们得到了想要的对应的对象,这就是一个工厂类

单例模式:
      “例”,就是实例,就是对象;
      单例,就是一个实例,就是一个对象。
      单例模式指的就是:一个类,只能实例化出一个对象来。
需求:
      设计一个类,该类,最终只能从它那里,获得一个对象!
[PHP] 纯文本查看 复制代码
<?php
/*传智播客济南校区*/
class Single{
    //将构造方法私有化
    private function __construct(){}
    //提供一个公共的静态方法供外界调用以获得对象
    static function GetSingle(){
        //设定一个静态局部变量,以存储该唯一对象(单例)
        static $obj;
        //如果还没new过
        if(!isset($obj)){
            echo "进来了";
            $obj = new self();
        }
        //否则直接返回new过的对象
        return $obj;
    }
}

//实例化对象
$d1 = Single::GetSingle();
$d2 = Single::GetSingle();
$d3 = Single::GetSingle();

//将实例化后的对象打印出来
var_dump($d1);
var_dump($d2);
var_dump($d3);


得到的结果为:

进来了
object(Single)#1 (0) {}
object(Single)#1 (0) {}
object(Single)#1 (0) {}

由结果我们可以看出来虽然我实例化很多个类,但是返回的对象只是第一次实例化后的对象,这就是单例模式。

今天的设计模式就讲解到这里,不知道大家对设计模式还有什么疑问那?
如果有疑问,欢迎来传智播客济南校区我们来一起探讨一下~~



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马