博客
关于我
设计模式(二)—工厂模式(简单工厂模式)(附代码)
阅读量: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/

    你可能感兴趣的文章
    PAT 1027 Colors in Mars
    查看>>
    PAT 1127 ZigZagging on a Tree[难]
    查看>>
    PAT 2-07. 素因子分解(20)
    查看>>
    PAT-1044. Shopping in Mars (25)
    查看>>
    PAT-乙级-1040 有几个PAT
    查看>>
    PAT1093 Count PAT's (25)(逻辑题)
    查看>>
    PATA1038题解(需复习)
    查看>>
    Patching Array
    查看>>
    Path does not chain with any of the trust anchors
    查看>>
    Path形状获取字符串型变量数据
    查看>>
    PAT甲级——1001 A+B Format (20分)
    查看>>
    Skywalking原理
    查看>>
    PAT甲级——1006 Sign In and Sign Out (25分)
    查看>>
    PAT甲级——1007 Maximum Subsequence Sum (25分)
    查看>>
    PAT甲级——1009 Product of Polynomials (25分)(最后一个测试点段错误)
    查看>>
    Spring对jdbc的支持
    查看>>
    PayPal网站付款标准版(for PHP)
    查看>>
    Paystack Android SDK 集成与使用指南
    查看>>
    pbf格式详解,javascript加载导出pbf文件示例
    查看>>
    PBOC2.0与3.0的区别
    查看>>