工厂模式-Php版

工厂模式-Php版工厂模式 Factory Pattern 最常用的设计模式之一 这种类型的设计模式属于创建型模式 它提供了一种创建对象的最佳方式 在工厂模式中 我们在创建对象时不会对客户端暴露创建逻辑 并且是通过使用一个共同的接口来指向新创建的对象 工厂模式分为三类 简单工厂模式 Simple Factory 说明 简单工厂模式属于创建型模式又叫做静态工厂方法模式 它属于类创建型模式 在简单工厂模式中

工厂模式(Factory Pattern)最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

工厂模式分为三类:

简单工厂模式(Simple Factory)说明:简单工厂模式属于创建型模式又叫做静态工厂方法模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

简单工厂模式demo

abstract class Fruit{}

class Apple extends Fruit{

function __construct(){
echo "Apple";
}
}

class Banana extends Fruit{

function __construct(){
echo "Banana";
}
}

class Factory{

static function fruit($classname){
if($classname == "Apple"){
return new Apple();
}else if($classname == "Banana"){
return new Banana();
}
return null;
}
}

应用场景:类的自动加载

工厂方法模式(Factory Method)说明:工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。

abstract class Fruit{

}
class Apple extends Fruit{
function __construct(){
echo "Apple";
}
}

class Banana extends Fruit{
function __construct(){
echo "Banana";
}
}

interface Factory{
createFruit();
}

class AppleFactory implements Factory{
function createFruit(){
return new Apple();
}
}
class BananaFactory implements Factory{
function createFruit(){
return new Banana();
}
}

应用场景:

当一个类不知道它所必须创建的对象的类的时候。

当一个类希望由它的子类来指定它所创建的对象的时候。

当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。

抽象工厂模式(Abstract Factory)说明:抽象工厂模式是一种创建型模式,它提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。它的实质是“提供接口,创建一系列相关或独立的对象,而不指定这些对象的具体类”。

class Button{}

class Border{}

class MacButton extends Button{}

class WinButton extends Button{}

class MacBorder extends Border{}

class WinBorder extends Border{}

interface AbstractFactory {

public function CreateButton();

public function CreateBorder();

}

class MacFactory implements AbstractFactory{

public function CreateButton(){ return new MacButton(); }

public function CreateBorder(){ return new MacBorder(); }

}

class WinFactory implements AbstractFactory{

public function CreateButton(){ return new WinButton(); }

public function CreateBorder(){ return new WinBorder(); }

}

?>

简单工厂其实不是一个标准的的设计模式。GOF 23种设计模式中只有「工厂方法模式」与「抽象工厂模式」。简单工厂模式可以看为工厂方法模式的一种特例,为了统一整理学习,就都归为工厂模式。

这三种工厂模式在设计模式的分类中都属于创建型模式,三种模式从上到下逐步抽象。

工厂模式优点

可以使代码结构清晰,有效地封装变化。在编程中,产品类的实例化有时候是比较复杂和多变的,通过工厂模式,将产品的实例化封装起来,使得调用者根本无需关心产品的实例化过程,只需依赖工厂即可得到自己想要的产品。对调用者屏蔽具体的产品类。
如果使用工厂模式,调用者只关心产品的接口就可以了,至于具体的实现,调用者根本无需关心。即使变更了具体的实现,对调用者来说没有任何影响。降低耦合度。
产品类的实例化通常来说是很复杂的,它需要依赖很多的类,而这些类对于调用者来说根本无需知道,如果使用了工厂方法,我们需要做的仅仅是实例化好产品类,然后交给调用者使用。对调用者来说,产品所依赖的类都是透明的。
编程小号
上一篇 2025-03-16 11:57
下一篇 2025-02-13 23:27

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/138484.html