【PHP】实现类的无缝动态扩展,设计模式,php工厂模式应用场景,以下代码是工厂模式在框架设计中的真实使用案例代码

php工厂模式应用场景,以下代码是工厂模式在框架设计中的真实使用案例代码

PHP工厂模式,适用于多种场景,主要包括:

创建对象过程复杂:当创建对象的过程比较复杂,需要进行一些预处理或者计算,并且这些处理过程不应该由客户端负责时,可以使用工厂模式。

根据条件创建对象:当需要根据不同的条件创建不同类型的对象时,工厂模式可以根据条件来选择创建哪种类型的对象。

统一管理对象创建:当需要统一管理对象的创建过程,并且客户端无需关心具体的创建细节时,可以使用工厂模式。

扩展性需求:当需要通过扩展工厂类来创建新的对象类型时,工厂模式可以通过添加新的工厂类来创建新的对象类型,而不需要修改客户端代码。

解耦对象创建和使用:当需要将对象的创建和使用解耦时,工厂模式可以将对象的创建过程封装在工厂类中,客户端只需要通过工厂类来获取对象,而不需要关心对象的具体创建细节。

工厂模式属于创建型模式,提供了一种创建对象的方式。它先定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类。使用工厂模式的扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以了,其屏蔽了产品的具体实现,调用者只需关心产品的接口。工厂模式的精髓就是可以根据不同的参数生成不同的类实例。

复制代码
<?php
interface AA{
    public static function isClass($class);
    public static function newClass($class);
    public function doAA();
}
class A implements AA{
    private static $a ='A';

    public static function isClass($class){
        if (self::$a==$class){
            return true;
        }
        return false;
    }
    public static function newClass($class){
        if (self::isClass($class)){
            return new self();
        }
        return null;
    }
    public function doAA(){
        echo "A";
    }

}


class B implements AA{
    private static $a ='B';

    public static function isClass($class){
        if (self::$a==$class){
            return true;
        }
        return false;
    }
    public static function newClass($class){
        if (self::isClass($class)){
            return new self();
        }
        return null;
    }
    public function doAA(){
        echo "B";
    }

}

class BB{
    
    public function newClass($class){
        return $class::newClass($class);
    }
}

$aa = new BB();
$aa->newClass("A")->doAA();
print(111111111)
?>
相关推荐
sunshine22 girl6 分钟前
Java学习六 Java常见API-2--String-3-字符串的截取替换和其他方法
java·开发语言·学习
LOVE️YOU16 分钟前
Python 函数名、函数对象与“把函数作为参数传递”
开发语言·python
sunshine22 girl1 小时前
Java学习六 Java常见API-1-Radom随机数
java·开发语言·学习
可乐鸡翅yeah_1 小时前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
潼心1412o1 小时前
C++初阶(长期更新)第6讲:类和对象(下)
开发语言·c++·算法
星光开发者2 小时前
基于决策树随机森林算法的小说推荐系统的设计与实现-计算机毕设【课程设计】78485
vue.js·算法·微信小程序·django·php·课程设计·express
夜晚回家2 小时前
Python 零基础入门 | 输入的数字为什么不能直接算
开发语言·python
时间的拾荒人2 小时前
Qt 事件机制全解析:从事件处理到事件过滤器
开发语言·qt·面试
于指尖飞舞2 小时前
java面试题总结
java·开发语言
zhangzeyuaaa3 小时前
深入理解 Ruby 运算符:本质、分类、坑点与重载实战
开发语言·前端·ruby