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

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

工厂模式优点

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

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

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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python的赋值功能很强大_python中赋值

    python的赋值功能很强大_python中赋值前言增强型赋值语句是经常被使用到的,因为从各种学习渠道中,我们能够得知i+=1的效率往往要比i=i+1更高一些(这里以+=为例,实际上增强型赋值语句不仅限于此)。所以我们会乐此不

    2022年8月7日
    12
  • 免费域名和空间搭建个人网站——服务器篇

    免费域名和空间搭建个人网站——服务器篇免费域名和空间搭建个人网站服务器篇网上有很多免费的服务器,但是免费的都不好用,只能凑合一下啦~~当然你也可以购买一些像腾讯,阿里云或者国外的虚拟主机。我用的是国内的主机屋点击免费空间,选择立即开通,然后登陆,注册成功后,点击立即开通,就可以了开通之后,进入控制台,点击一键初始化网站然后初始化FTP密码,初始化Mysql数据库密码,接下来需要解析域名,选择常规功能,点击域

    2022年6月22日
    2.4K
  • nmap命令详解「建议收藏」

    nmap命令详解「建议收藏」nmap是一个网络探测和安全扫描程序,系统管理者和个人可以使用这个软件扫描大型的网络,获取那台主机正在运行以及提供什么服务等信息。nmap支持很多扫描技术,例如:UDP、TCPconnect()、TCPSYN(半开扫描)、ftp代理(bounce攻击)、反向标志、ICMP、FIN、ACK扫描、圣诞树(XmasTree)、SYN扫描和null扫描。从扫描类型一节可以得到细节。nmap还

    2022年5月8日
    151
  • 可控硅工作原理及参数详解图_晶闸管和可控硅有什么区别

    可控硅工作原理及参数详解图_晶闸管和可控硅有什么区别原创:JackieLong转自:https://www.cnblogs.com/sunshine-jackie/p/8137469.html可控硅全称“可控硅整流元件”(SiliconControlledRectifier),简写为SCR,别名晶体闸流管(Thyristor),是一种具有三个PN结、四层结构的大功率半导体器件。可控硅体积小、结构简单、功能强,可起到变频、整流、逆变、…

    2025年8月19日
    4
  • matlab矩阵点乘点除,点除与矩阵除法

    matlab矩阵点乘点除,点除与矩阵除法点除与矩阵除法:在书写程序的时候,点乘和矩阵乘法写错的时候再进行程序调适的时候MATLAB会返回错误说明。但是对于点除容易出现问题,下面以一个简单的例子说明这个问题:比如我们要计算:A=[1,1];B=[2,1];C=A/B;上面的程序我们计算的是A与B的点除。但是由于疏忽而把点除“./”写为“/”这样结果是不同的,大家可以看看它们的结果:>>A/Bans=0.6000…

    2022年6月16日
    57
  • 《项目经理演讲与呈现技巧》总结

    《项目经理演讲与呈现技巧》总结

    2021年9月13日
    55

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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