更多优质内容
请关注公众号

PHP设计模式篇(一) 单例模式和工厂模式-张柏沛IT博客

正文内容

PHP设计模式篇(一) 单例模式和工厂模式

栏目:PHP 系列:PHP设计模式 发布时间:2022-03-15 20:35 浏览量:1242

- 单例模式

单例模式的适用场景是复用唯一的单实例,例如创建数据库连接只创建一个唯一连接,之后所有sql都复用该连接。


单例模式如何实现:

1、需要一个private的构造函数;

2、需要一个静态成员保存类的唯一实例;

3、需要一个能创建类唯一实例的静态方法;


class Instance{
    public static $instance;
    private function __construct($params){
    	// 初始化操作
    }
    
    public static function getInstance($params){
        if (!self::$instance){
             self::$instance = new self($params);
        }
        return self::$instance;
    }
}



- 工厂模式

工厂模式不是一种模式,而是简单工厂模式、工厂方法模式和抽象工厂模式共3种模式。

工厂模式的作用是返回一个创建好的对象。


1、简单工厂模式/工厂方法模式的使用场景:创建一个对象需要大量复杂的初始化操作的情况下,由工厂类实现对象的创建和初始化(复杂的初始化操作不放入构造函数,构造函数只放简单的初始化操作)。

class Mask{	// 口罩类
    
}

class MaskFactory{	// 口罩工厂类
    public static createMask(){
        mask = new Mask()    ;
        // 100 行初始化代码
        return mask;
    }
    
    public static otherMethods(){	// 工厂类的其他方法
            
    }
}


如果口罩类存在子类:高级口罩和低级口罩,那么分别设立高级口罩工厂类和低级罩工厂类,而不是在一个口罩工厂类中通过if-else判断生产多个种类的口罩,不然就违反了面向对象的开放-封闭原则,就是在程序中对“扩展”开放,对“修改”封闭。

用 if-else 扩展不同类型的对象就是简单方法模式;创建多个工厂类对应不同类型的对象就是工厂方法模式。



抽象工厂类的使用场景:如果有100种不同的类,用工厂方法需要定义100个工厂方法。为了避免该情况可以使用将性质相似的类分组,每个分组创建一个工厂类,每一个工厂类是一个抽象的工厂类。

一个抽象工厂类的多个方法中,每个方法对应一种该分组下的工厂方法用来创建实例。

例如 有口罩和防护服两种产品,都分为高级和低级。则可以创建高级产品工厂类和低级产品工厂类。高级产品工厂类包含两个方法:createMask() 和 createSuit()。分别用来创建口罩对象和防护服对象。




更多内容请关注微信公众号
zbpblog微信公众号

如果您需要转载,可以点击下方按钮可以进行复制粘贴;本站博客文章为原创,请转载时注明以下信息

张柏沛IT技术博客 > PHP设计模式篇(一) 单例模式和工厂模式

热门推荐
推荐新闻