工厂模式-Php版

工厂模式-Php版工厂模式(FactoryPattern)最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。工厂模式分为三类:简单工厂模式(SimpleFactory) 工厂方法模式(FactoryMethod) 抽象工厂模式(AbstractFactory)简单工厂其实不是一个标准的的设计模式。GOF23种设计模式中只有「工厂方法模式」与「抽象工厂模式」。简单

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

工厂模式(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种设计模式中只有「工厂方法模式」与「抽象工厂模式」。简单工厂模式可以看为工厂方法模式的一种特例,为了统一整理学习,就都归为工厂模式。

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

工厂模式优点

可以使代码结构清晰,有效地封装变化。在编程中,产品类的实例化有时候是比较复杂和多变的,通过工厂模式,将产品的实例化封装起来,使得调用者根本无需关心产品的实例化过程,只需依赖工厂即可得到自己想要的产品。对调用者屏蔽具体的产品类。

如果使用工厂模式,调用者只关心产品的接口就可以了,至于具体的实现,调用者根本无需关心。即使变更了具体的实现,对调用者来说没有任何影响。降低耦合度。

产品类的实例化通常来说是很复杂的,它需要依赖很多的类,而这些类对于调用者来说根本无需知道,如果使用了工厂方法,我们需要做的仅仅是实例化好产品类,然后交给调用者使用。对调用者来说,产品所依赖的类都是透明的。 

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/164369.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 数据结构:排序趟数 / 比较次数与序列的原始状态有关的排序方法有哪些?「建议收藏」

    数据结构:排序趟数 / 比较次数与序列的原始状态有关的排序方法有哪些?「建议收藏」先说结论比较次数与序列初态无关的算法是:二路归并排序、简单选择排序、基数排序比较次数与序列初态有关的算法是:快速排序、直接插入排序、冒泡排序、堆排序、希尔排序排序趟数与序列初态无关的算法是:直接插入排序、折半插入排序、希尔排序、简单选择排序、归并排序、基数排序排序趟数与序列初态有关的算法是:冒泡排序、快速排序关于排序趟数插入排序、选择排序趟数都是固定的n-1。对于插入排序来说或,即使序列有序,也要依次从第二个元素开始,向前找它的插入位置。冒泡排序趟数与数据有关,优

  • java 开源 报表_6款常用的Java开源报表制作工具

    java 开源 报表_6款常用的Java开源报表制作工具原标题:6款常用的Java开源报表制作工具1.Aspose.CellsforJasperReports是一个基于Java的开源报表工具,它可以在Java环境下像其他IDE报表工具一样来制作报表,支持PDF、HTML、XLS、CSV和XML文件输出格式,是当前Java开发者最常用的报表工具。<Aspose.CellsforJasperReports试用版下载>2.BIRT…

    2022年10月20日
  • 关于pdb文件

    关于pdb文件关于pdb文件当程序在VS上编译时,程序所依赖的所有动态链接库(dll文件)也会被编译,编译过程中每个dll都会产生一个pdb文件,又称为“符号文件”,是一个存储数据的信息文件,其包含dll库在编译过程的某些调试信息,例如程序中所用到的全局变量、局部变量、函数名以及他们的入口地址等。当使用VS调试程序时,会默认加载你的程序以及程序依赖的dll库产生的所有pdb文件,但是结…

  • 算法竞赛入门【码蹄集新手村600题】(MT1551-1600)[通俗易懂]

    算法竞赛入门【码蹄集新手村600题】(MT1551-1600)[通俗易懂]算法竞赛入门【码蹄集新手村600题】(MT1551、MT1552、MT1553、MT1554、MT1555……MT1600)

  • Redis 高级面试题 学会这些还怕进不了大厂?「建议收藏」

    Redis 高级面试题 学会这些还怕进不了大厂?

  • Python如何将py文件打包成exe[通俗易懂]

    Python如何将py文件打包成exe[通俗易懂]安装pyinstaller打开cmd窗口,输入pipinstallpyinstaller,命令行输出successfully表示成功。生成exe文件一、单个py文件在py文件目录下,打开c

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号