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

    你可能感兴趣的文章
    Part 2异常和错误
    查看>>
    Pascal Script
    查看>>
    Spring Boot(七十六):集成Redisson实现布隆过滤器(Bloom Filter)
    查看>>
    passwd命令限制用户密码到期时间
    查看>>
    Spring @Async执行异步方法的简单使用
    查看>>
    PAT (Basic Level) Practice 乙级1031-1040
    查看>>
    PAT (Basic Level) Practice 乙级1041-1045
    查看>>
    PAT (Basic Level) Practise - 写出这个数
    查看>>
    PAT 1027 Colors in Mars
    查看>>
    PAT 1127 ZigZagging on a Tree[难]
    查看>>
    PAT 2-07. 素因子分解(20)
    查看>>
    SparkSQL学习03-数据读取与存储
    查看>>
    PAT L2-012. 关于堆的判断
    查看>>
    PAT Spell It Right [非常简单]
    查看>>
    PAT-1044. Shopping in Mars (25)
    查看>>
    PAT-乙级-1040 有几个PAT
    查看>>
    PAT1093 Count PAT's (25)(逻辑题)
    查看>>
    PATA1038题解(需复习)
    查看>>
    Patching Array
    查看>>
    PatchMatchStereo可能会需要的Rectification
    查看>>