博客
关于我
设计模式(二)—工厂模式(简单工厂模式)(附代码)
阅读量:276 次
发布时间:2019-03-01

本文共 1467 字,大约阅读时间需要 4 分钟。

工厂模式

工厂模式是一种最常用的设计模式,属于创建型模式,用于提供创建对象的最佳方式。这种模式的核心思想是通过一个共同的接口来创建对象,从而隐藏了创建逻辑,避免了对客户端的暴露。

在工厂模式中,对象的创建是通过工厂类完成的。工厂类通常实现一个工厂方法,这个方法返回一个新创建的对象。这种方式让客户端只需要调用工厂方法即可获得所需对象,而无需直接关心对象的创建细节。

工厂模式的特点

  • 创建对象的统一入口:工厂类提供一个统一的方法(如getObject()),客户端只需要调用这个方法即可获得所需对象。
  • 遮蔽创建逻辑:客户端无法直接看到对象是如何被创建的,所有的创建逻辑都在工厂类内部。
  • 灵活性和可扩展性:当需要新增对象类型时,只需在工厂类中添加对应的创建逻辑,无需修改客户端代码。
  • 工厂模式的应用场景

    • 当需要创建多种不同类型的对象时,工厂模式非常有用。
    • 当对象的创建逻辑复杂或需要多种情况处理时,工厂模式可以简化客户端代码。
    • 当对象的创建需要遵循某种规则或条件时,工厂模式可以方便地处理这些逻辑。

    工厂模式的实现

    工厂模式通常分为简单工厂抽象工厂两种类型。

  • 简单工厂

    • 简单工厂是一个具体的工厂类,实现了所有可能的对象创建逻辑。
    • 例如:
      public class SimpleFactory {    public Animal createAnimal(String type) {        if (type.equals("dog")) {            return new Dog();        } else if (type.equals("cat")) {            return new Cat();        } else {            throw new IllegalArgumentException("Invalid animal type");        }    }}
  • 抽象工厂

    • 抽象工厂是一个抽象类,包含多个工厂方法,每个方法返回一个具体的工厂。
    • 例如:
      public abstract class AbstractFactory {    public abstract Animal createAnimal(String type);}public class DogFactory extends AbstractFactory {    @Override    public Animal createAnimal(String type) {        return new Dog();    }}
  • 工厂模式的优点

  • 客户端代码简洁:客户端只需要调用的工厂方法即可获得所需对象,无需关心对象的创建过程。
  • 遮蔽复杂性:工厂类可以处理复杂的对象创建逻辑,客户端无需了解具体实现。
  • 容易扩展:新增对象类型时,只需在工厂类中添加对应的创建逻辑,无需修改客户端代码。
  • 工厂模式的缺点

  • 性能问题:在频繁创建对象的情况下,工厂模式可能带来一定的性能 overhead。
  • 工厂类复杂度:当对象类型越来越多时,工厂类可能变得非常复杂。
  • 工厂模式与其他创建模式的比较

    • 单例模式:用于确保只有一个实例被创建,并且在多次请求时返回同一个实例。
    • 原型模式:用于创建对象的克隆,通过复制现有对象来减少资源消耗。
    • 建造器模式:与工厂模式类似,但更强调逐步构造对象,提供更大的控制权。

    工厂模式在大多数应用场景中都是最优选择,尤其是在需要创建多种不同类型的对象时。

    转载地址:http://qtxo.baihongyu.com/

    你可能感兴趣的文章
    PHP大数组过滤元素、修改元素性能分析
    查看>>
    PHP大文件切片下载代码
    查看>>
    PHP如何下载远程文件到指定目录
    查看>>
    php如何优化压缩的图片
    查看>>
    php如何做表格,新手怎么制作表格
    查看>>
    RabbitMQ高级特性
    查看>>
    php如何定义的数位置,php如何实现不借助IDE快速定位行数或者方法定义的文件和位置...
    查看>>
    RabbitMQ集群 - 普通集群搭建、宕机情况
    查看>>
    php如何正确的获得文件的后缀名
    查看>>
    PHP如何生成唯一的数字ID
    查看>>
    PHP如何获取当前页面的最后修改时间
    查看>>
    PHP如何读取json数据
    查看>>
    PHP字符串
    查看>>
    PHP字符串递增
    查看>>
    php学习之基础语法
    查看>>
    RabbitMQ集群 - 仲裁队列、Raft协议(最详细的选举流程)
    查看>>
    PHP学习总结(11)——PHP入门篇之WAMPServer多站点配置
    查看>>
    PHP学习总结(12)——PHP入门篇之变量
    查看>>
    PHP学习总结(13)——PHP入门篇之常量
    查看>>
    PHP学习总结(14)——PHP入门篇之常用运算符
    查看>>