更新时间:2022-04-24 09:52:35 来源:极悦 浏览705次
简单的工厂模式。 这允许在不向客户端公开对象创建逻辑的情况下创建对象的接口。
工厂方法模式。 这允许创建对象的接口,但允许子类确定要实例化哪个类。
抽象工厂模式。 与上述两种模式不同,抽象工厂是创建相关对象的接口,无需指定/公开它们的类。我们也可以说它提供了另一个工厂的对象,负责创建所需的对象。
假设您有一个汽车类,其中包含与汽车相关的所有属性和方法。在它的最基本形式中,您可以这样创建它:
<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设计模式之工厂模式,里面有更详细的介绍,相信对大家的学习会有所帮助的。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习