专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 简单工厂设计模式的例子

简单工厂设计模式的例子

更新时间:2022-04-24 09:52:35 来源:动力节点 浏览619次

工厂模式有三种变体:

简单的工厂模式。 这允许在不向客户端公开对象创建逻辑的情况下创建对象的接口。

工厂方法模式。 这允许创建对象的接口,但允许子类确定要实例化哪个类。

抽象工厂模式。 与上述两种模式不同,抽象工厂是创建相关对象的接口,无需指定/公开它们的类。我们也可以说它提供了另一个工厂的对象,负责创建所需的对象。

问题

假设您有一个汽车类,其中包含与汽车相关的所有属性和方法。在它的最基本形式中,您可以这样创建它:

<font style="vertical-align: inherit;"><font style="vertical-align: inherit;">$car = 新车();</font></font>

随着时间的推移,需要立即对 Car 对象的创建方式进行一些更改。我们需要创建基于 Cart Type 而不仅仅是 Car 的类对象。所以你需要在你创建这个 Car 类的对象的所有地方进行更改。

但是,随着时间的推移,Car 对象的创建方式将不可避免地发生变化。例如,我们需要创建基于 Car类型的类,而不仅仅是 Car。像这样

与其这样做,不如创建一个实现工厂模式的类。

解决方案

在上一节中,我们认识到我们正在使用new关键字创建 Car 类型的对象。后来,决定创建一个 Car 类的对象,但基于 Car 类型,如 Sedan、SUV 等。

我们应该在需要时将 Car 类型类创建代码放置在所有地方,或者实现 Factory 以有效地处理它。请参考下面的代码块,它显示了简单工厂模式的实现。

<?php<font></font>
<font></font>
class carFactory {<font></font>
<font></font>
    public function __construct() {<font></font>
        // ... //<font></font>
    }<font></font>
<font></font>
    public static function build ($type = '') {<font></font>
            <font></font>
        if($type == '') {<font></font>
            throw new Exception('Invalid Car Type.');<font></font>
        } else {<font></font>
<font></font>
            $className = 'car_'.ucfirst($type);<font></font>
<font></font>
            // Assuming Class files are already loaded using autoload concept<font></font>
            if(class_exists($className)) {<font></font>
                return new $className();<font></font>
            } else {<font></font>
                throw new Exception('Car type not found.');<font></font>
            }<font></font>
        }<font></font>
    }<font></font>
}

在上面的类中,您可以看到我们有一个可用的静态方法,它负责根据您传递的类型创建对象。现在我们需要不同汽车类型的具体类,如下所示:

<?php<font></font>
<font></font>
class car_Sedan {<font></font>
    <font></font>
    public function __construct() {<font></font>
        echo "Creating Sedan";<font></font>
    }<font></font>
    <font></font>
}<font></font>
<font></font>
class car_Suv {<font></font>
<font></font>
    public function __construct() {<font></font>
        echo "Creating SUV";<font></font>
    }<font></font>
<font></font>
}

至此,我们的工厂和具体类已经可以使用了,让我们来练习一下创建需要汽车类型的对象。

// Creating new Sedan<font></font>
$sedan = carFactory::build('sedan');<font></font>
<font></font>
// Creating new SUV<font></font>
$suv = carFactory::build('suv');

以上就是关于“简单工厂设计模式的例子”介绍,大家如果对此比较感兴趣,想了解更多的相关知识,可以关注一下动力节点的Java设计模式之工厂模式,里面有更详细的介绍,相信对大家的学习会有所帮助的。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>