简单工厂模式

现实生活中的例子

想象一下,你在建造一座房子,需要安装门。你可以选择穿上木匠的衣服,带上木头、胶水、钉子以及制作门所需的所有工具,然后在你的房子里开始制作门;或者,你可以简单地给工厂打个电话,让他们把已经做好的门送过来,这样你就无需学习如何制作门,也无需处理制作过程中产生的杂乱无章的局面。

用简单的话来说

简单工厂模式就是为客户生成一个实例,而不需要向客户暴露任何实例化逻辑。

维基百科的说法

在面向对象编程(OOP)中,工厂是一个用于创建其他对象的对象------正式地说,工厂是一个函数或方法,它通过某种方法调用返回具有不同原型或类的对象,这些对象通常被假定为是"新"创建的。

程序示例

首先,我们有一个门的接口和它的实现

php 复制代码
interface Door
{
    public function getWidth(): float;
    public function getHeight(): float;
}

class WoodenDoor implements Door
{
    protected $width;
    protected $height;

    public function __construct(float $width, float $height)
    {
        $this->width = $width;
        $this->height = $height;
    }

    public function getWidth(): float
    {
        return $this->width;
    }

    public function getHeight(): float
    {
        return $this->height;
    }
} 

然后,我们有一个门工厂,它制造门并返回门对象

php 复制代码
class DoorFactory
{
    public static function makeDoor($width, $height): Door
    {
        return new WoodenDoor($width, $height);
    }
}

它的使用方法如下

php 复制代码
// Make me a door of 100x200
$door = DoorFactory::makeDoor(100, 200);

echo 'Width: ' . $door->getWidth();
echo 'Height: ' . $door->getHeight();

// Make me a door of 50x100
$door2 = DoorFactory::makeDoor(50, 100);

何时使用?

当创建一个对象不仅仅是几个赋值操作,而是涉及到一些逻辑时,将这些逻辑放在一个专门的工厂类中,而不是在每个地方重复相同的代码,是有意义的。

相关推荐
山栀shanzhi几秒前
在做直播时,I帧的间隔(GOP)一般是多少?
网络·c++·面试·ffmpeg
白菜欣1 分钟前
Linux —《从零上手Vim:核心用法全解析》
linux·编辑器·vim
止语Lab5 分钟前
Go vs Java GC:同一场延迟战争的两条路
java·开发语言·golang
Rust研习社5 分钟前
Rust 多线程从入门到实战
开发语言·后端·rust
Ulyanov23 分钟前
《玩转QT Designer Studio:从设计到实战》 QT Designer Studio数据绑定与表达式系统深度解析
开发语言·python·qt
王老师青少年编程23 分钟前
csp信奥赛C++高频考点专项训练之贪心算法 --【排序贪心】:魔法
c++·算法·贪心·csp·信奥赛·排序贪心·魔法
平行云23 分钟前
虚拟直播混合式2D/3D应用程序实时云渲染推流解决方案
linux·unity·云原生·ue5·图形渲染·实时云渲染·像素流送
晓觉儿33 分钟前
【GPLT】2026年第十一届团队程序设计天梯赛赛后题解(已写2h,存档中)
数据结构·c++·算法·深度优先·图论
志摩凛42 分钟前
被产品经理逼疯后,我们重构了移动端上传组件——2026最新成果复盘
设计模式·架构
我想成为你噶叻叻猪1 小时前
imx6ull板子ping不通ubuntu
linux·运维·ubuntu