PHP设计模式总结

发布时间:2019-08-07 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了PHP设计模式总结脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

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

一、单例模式

1.什么是单例模式:

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

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

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

3.代码实现

class Singleton{
    PRivate static $obj;//私有化静态属性
    private function __construct(){
        //私有化构造方法
    }
    private function __clone(){
        //私有化克隆方法
    }
    //静态方法产生对象
    static public function getInstance(){
        //对象不存在new一个对象
        if(!is_object(self::$obj)){
            self::$obj = new Singleton();
        }
        return self::$obj;
    }
}

4.测试单例模式

//无法实例化,可以防止new实例化这个类,强制使用getInstance方法,创建对象
$obj1 = new Singleton;
var_dump($obj1);
//成功获取对象
$obj2 = Singleton::getInstance();
VAR_dump($obj2);
//无法克隆
$obj3 = clone $obj2;
var_dump($obj3);

二、工厂模式

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

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

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

实现

SimpleFactory.php

<?php
namespace DesignPatternsCreationalSimpleFactory;
class SimpleFactory
{
    public function createBicycle(): Bicycle
    {
        return new Bicycle();
    }
}

Bicycle.php

<?php
namespace DesignPatternsCreationalSimpleFactory;
class Bicycle
{
    public function driveTo(string $destination)
    {
    }
}

使用

$factory = new SimpleFactory();
 $bicycle = $factory->createBicycle();
 $bicycle->driveTo('Paris');

我们需要什么样的实例,就到工厂的实例方法里去拿。这里只定义了一个类的实例,你可以定义更多。

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

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

总结

  1. 工厂类必须有一个工厂方法;

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

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

三、php设计模式汇总

PHP设计模式汇总

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

脚本宝典总结

以上是脚本宝典为你收集整理的PHP设计模式总结全部内容,希望文章能够帮你解决PHP设计模式总结所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。