首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将 Enum 或 String 用于静态工厂方法?

将 Enum 或 String 用于静态工厂方法是一种编程技巧,它可以使代码更具可读性和可维护性。静态工厂方法是一种创建对象的方式,它不需要使用 new 关键字,而是通过调用一个静态方法来创建对象。

在这种情况下,Enum 或 String 可以用于静态工厂方法,以便根据传入的参数创建不同的对象。这种方法可以避免使用大量的 if-else 语句,并且可以使代码更具可读性和可维护性。

例如,假设我们有一个 Shape 类,它有多个子类,如 Circle、Square 和 Rectangle。我们可以使用 Enum 或 String 作为参数来创建不同的 Shape 对象,如下所示:

代码语言:java
复制
public class ShapeFactory {
    public static Shape createShape(String shapeType) {
        switch (shapeType) {
            case "CIRCLE":
                return new Circle();
            case "SQUARE":
                return new Square();
            case "RECTANGLE":
                return new Rectangle();
            default:
                throw new IllegalArgumentException("Invalid shape type");
        }
    }
}

在这个例子中,我们使用 String 作为参数来创建不同的 Shape 对象。我们也可以使用 Enum 来代替 String,如下所示:

代码语言:java
复制
public enum ShapeType {
    CIRCLE, SQUARE, RECTANGLE
}

public class ShapeFactory {
    public static Shape createShape(ShapeType shapeType) {
        switch (shapeType) {
            case CIRCLE:
                return new Circle();
            case SQUARE:
                return new Square();
            case RECTANGLE:
                return new Rectangle();
            default:
                throw new IllegalArgumentException("Invalid shape type");
        }
    }
}

在这个例子中,我们使用 Enum 作为参数来创建不同的 Shape 对象。这种方法可以避免使用字符串常量,并且可以使代码更具可读性和可维护性。

总之,将 Enum 或 String 用于静态工厂方法是一种编程技巧,它可以使代码更具可读性和可维护性。在实际应用中,我们可以根据需要选择使用 Enum 或 String 作为参数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Effective Java 2.0_中英文对照_Item 1

一个类可以为它的客户提供静态工厂方法来代替构造函数,或者除了构造函数之外再提供一个静态工厂方法。提供静态工厂方法代替公有构造函数既有优点也有缺点。...这项技术适用于基于接口的框架(Item 18),接口为静态工厂方法提供了自然的返回类型。...根据枚举类型的大小,静态工厂方法返回两个实现中的一个,枚举类型的分类:如果枚举类型中有六十四个元素或更少,与大多数枚举类型一样,静态工厂返回一个RegularEnumSet实例,由单个的long支持;如果枚举类型中有六十五个元素或更多...只提供静态工厂方法的缺点是没有公有或保护构造函数的类不能进行子类化。公有静态工厂返回的非公有类同样如此。例如,不可能子类化集合框架中的这些便利实现类。...Javadoc工具可能某一天会关注静态工厂方法。同时,你可以通过在类中或接口注释中注意静态工厂和遵循通用命名约定来减少这个劣势。

25630

【设计模式】-创建型模式-第2章第2讲-【工厂模式】

目录 场景描叙: 1、简单工厂模式 1.1、静态工厂模式 1.2、 使用反射机制进行类注册的简单工厂模式 1.3、使用 newInstance 方法进行类注册的简单工厂模式 2、工厂方法模式 2.1、...它的核心结构有四个角色,分别是抽象工厂;具体工厂;抽象产品;具体产品 工厂方法模式是在静态工厂模式上的改进。工厂类被抽象化,用于实例化特定产品类的代码被转移到实现抽象方法的子类中。...抽象工厂设计模式的实现如图 3-1 所示:  图 3-1 抽象工厂模式由以下类组成: AbstractFactory (抽象工厂类):抽象类,用于声明创建不同类型产品的方法。...它针对不同的抽象产品类都有对应的创建方法。 ConcreteFactory (具体工厂类):具体类,用于实现抽象工厂基类中声明的方法。针对每个系列的产品都有一个对应的具体工厂类。...结尾: 工厂的模式的核心就是右工厂类来负责合适对象的创建。如果工厂类很复杂,比如同时服务于多种类型的对象或工厂,也可以根据前面内容修改相应的代码。 下一节,分享建造者模式……

26740
  • Java中不可或缺的50个小技巧,好用!

    1、考虑用静态工厂方法替代构造函数 例子: Integer.valueOf(“1”)、Boolean.valueOf(“true”)等。...相当于更强大的工厂。直接从父类获取到子类。尤其适用于工具类(提供各种API)。例子:Collections。...可以将listener声明为成员变量,每次都复用同一个对象,并且可以使用静态域(static变量)。比如String类的CASE_INSENSITIVE_ORDER域。...22、优先考虑静态类成员 嵌套类的目的应该只是为了他的外围类提供服务,如果以后还可能用于其他环境中,则应该设计为顶层类。静态类相当于一个普通的外部类,只是恰好声明在了一个类内部。...40、慎用重载 41、慎用可变参数 42、返回0长度的数组或者集合,而不是null null一般用于表示没有被初始化或处理,如果方法返回了null,则需要在上层做更多的处理,以防止NPE。

    57300

    Java接地气日常编码技巧

    ---- 1、考虑用静态工厂方法替代构造函数 例子: Integer.valueOf(“1”)、Boolean.valueOf(“true”)等。...相当于更强大的工厂。直接从父类获取到子类。尤其适用于工具类(提供各种API)。例子:Collections。...可以将listener声明为成员变量,每次都复用同一个对象,并且可以使用静态域(static变量)。比如String类的CASE_INSENSITIVE_ORDER域。...22、优先考虑静态类成员 嵌套类的目的应该只是为了他的外围类提供服务,如果以后还可能用于其他环境中,则应该设计为顶层类。静态类相当于一个普通的外部类,只是恰好声明在了一个类内部。...41、慎用重载 42、慎用可变参数 43、返回0长度的数组或者集合,而不是null null一般用于表示没有被初始化或处理,如果方法返回了null,则需要在上层做更多的处理,以防止NPE。

    64330

    深度解析Java中的5个“黑魔法”

    在绝大多数情况下,注释将被用于描述语言结构,例如类,字段,方法等,但是在另一种情况下,可以将注释作为可实现的接口。 在常规的使用方法中,注释就是注释,接口就是接口。...例如,通过静态工厂模式来实例化对象,其实是将类本身的构造方法声明为private,这样就不能直接通过类的构造方法实例化对象了,而必须通过类本身的方法来调用这个被声明为private的构造方法来实例化对象...this.name = name; } public String getName() { return name; } // 静态工厂方法...如果只是代码块或构造方法,并不复杂,但如果构造方法、普通代码块和静态代码块同时出现在类中时就稍微复杂点,在这种情况下,会先执行静态代码块,然后执行普通代码块,最后才执行构造方法。...请注意,传统初始化,双花括号初始化和JDK 9静态工厂方法不仅可用于List。

    67910

    读完《Effective Java》: 我整理这 50 条技巧

    1、考虑用静态工厂方法替代构造函数 例子: Integer.valueOf(“1”)、Boolean.valueOf(“true”)等。...相当于更强大的工厂。直接从父类获取到子类。尤其适用于工具类(提供各种API)。例子:Collections。...可以将listener声明为成员变量,每次都复用同一个对象,并且可以使用静态域(static变量)。比如String类的CASE_INSENSITIVE_ORDER域。...22、优先考虑静态类成员 嵌套类的目的应该只是为了他的外围类提供服务,如果以后还可能用于其他环境中,则应该设计为顶层类。静态类相当于一个普通的外部类,只是恰好声明在了一个类内部。...41、慎用重载 42、慎用可变参数 43、返回0长度的数组或者集合,而不是null null一般用于表示没有被初始化或处理,如果方法返回了null,则需要在上层做更多的处理,以防止NPE。

    60920

    Java架构师教你写代码(一) - 使用静态工厂方法(简单工厂)替代构造器

    静态工厂方法在重复调用下返回相同对象,这样类能严格控制存在的实例。这样的类称为实例受控的类。编写实例受控的类有几个原因。 允许一个类来保证它是一个单例或不可实例化的。...这适用于基于接口的框架,其中接口为静态工厂方法提供了自然的返回类型。 Java 8 前,接口不能有静态方法。...在 OpenJDK 中,它们返回两种子类之一的一个实例,这取决于底层 enum 类型的大小: 如果它有 64 个或更少的元素,就像大多数 enum 类型一样,静态工厂返回一个 long 类型的 RegularEnumSet...实例 如果 enum 类型有 65 个或更多的元素,工厂将返回一个由 long[] 类型的 JumboEnumSet 实例。...通过在类或接口文档中多关注静态工厂方法,遵守通用命名约定的方式来减少这个困扰。 下面是一些静态工厂方法的习惯命名。

    61520

    Guava-1.基础工具类(base)

    Enums 和Enum实例一起使用的实用方法 Equivalence 判断两个实例是否被认为相等的策略。...Equivalence.Wrapper.equals(Object)和Equivalence.Wrapper.hashCode()委托一个Equivalence Equivalences 包含创建Equivalence实例的静态工厂方法...,在自己的方法开头调用,来确认正确的参数和状态 Predicates 属于Predicate实例的静态实用方法 Splitter 用于把字符串(或者其他CharSequence的实例)分割成的子串的类,...StopWatch 以毫微妙计量时间的流逝 Strings 属于String或CharSequence实例的静态实用方法 Suppliers 有用的支持 Throwables 属于Throwable实例的静态实用方法...Ticker 时间资源,返回一个时间值相当于从某些随机标记的固定时间点开始,经过的毫微秒数 1.3 Enum概述 枚举 描述 CaseFormat 用于在各种ASCII字符格式间转换的实用类 2.

    81220

    工厂模式和策略模式结合使用的案例介绍

    一、前言 在前面的文章中,我们有单独介绍过工厂模式和策略模式,这两种模式是实际开发中经常会用到的,今天来介绍下将两种模式结合起来使用的场景及案例,这种结合的模式也更加的常用,能帮助我们减少if-else...这次讲解的是整合工厂模式,使用静态工厂方法,根据入参来从内存中找到早已初始化好的具体策略对象,即枚举中的实例对象。...(channel.getChannelCode(), channel.getChannelService()); } } /** * 定义静态工厂方法...,Class clazz){ return getApplicationContext().getBean(name, clazz); } } 如此,我们的策略模式就和静态工厂方法模式整合好了...三、总结 为什么要使用这种策略模式和静态工厂方法模式结合的方案呢?

    1.2K20

    设计模式中的静态工厂,到底解决了什么问题?

    设计模式中的静态工厂,到底解决了什么问题? 一、基本说明 静态工厂模式是一种创建型设计模式,通常是通过一个静态方法创建实例对象,而不是通过构造函数直接暴露给客户端。...不必每次调用都创建新对象:如果应用需要重用实例,静态工厂方法可以控制其创建过程。例如,单例模式或者缓存已经创建的实例,可以通过静态工厂方法返回这些实例,避免了不必要的对象创建。...降低客户端和具体实现之间的耦合:客户端只依赖于静态工厂返回的抽象类型(如接口或抽象类),实际的类可以在不更改客户端代码的情况下自由更换。...尽管静态工厂模式有很多优点,但它也有一些缺点,如下所述: 类如果不含有 public 或 protected 的构造函数,那么就不能被子类化。...静态工厂方法与其他的静态方法实际上没有任何区分,对于编程新手可能会造成理解上的困惑。 总而言之,静态工厂方法是一种非常有用的设计模式,它提供了一种比构造函数更灵活的对象创建机制。

    4400

    Java 设计模式系列(4) —— 工厂模式

    工厂方法模式 工厂模式用于实现逻辑的封装,并通过公共的忌口提供对象的实例化服务,在添加新类时只需要做少量的修改。 1. 静态工厂模式(简单工厂模式) ?...静态工厂属于创建者模式,静态工厂模式的实现需要三个角色 简单工厂:负责创建具体产品产品,工厂类的方法可以被外界直接调用 抽象产品:在 Java 中,抽象产品是由抽象类或者接口担任的,用以让具体产品继承或实现...静态工厂的通用写法 ?...静态工厂与反射的结合 该方案采用一个 HashMap 存储创建的具体产品与 String 之间的映射,使用反射的方式来创建类。这样不仅代码代码更加精简,并且也符合了开闭原则 ?...我们可以为每一个类创建一个 newInstance 方法,用于返回该类自身的对象。 ?

    27410

    读完《Effective Java》后我淦了 50 条开发技巧

    1、考虑用静态工厂方法替代构造函数 例子: Integer.valueOf(“1”)、Boolean.valueOf(“true”)等。...相当于更强大的工厂。直接从父类获取到子类。尤其适用于工具类(提供各种API)。例子:Collections。...可以将listener声明为成员变量,每次都复用同一个对象,并且可以使用静态域(static变量)。比如String类的CASE_INSENSITIVE_ORDER域。...22、优先考虑静态类成员 嵌套类的目的应该只是为了他的外围类提供服务,如果以后还可能用于其他环境中,则应该设计为顶层类。静态类相当于一个普通的外部类,只是恰好声明在了一个类内部。...41、慎用重载 42、慎用可变参数 43、返回0长度的数组或者集合,而不是null null一般用于表示没有被初始化或处理,如果方法返回了null,则需要在上层做更多的处理,以防止NPE。

    64730

    Java编码指南:Consider static factory methods instead of constructors

    建议 ---- Consider static factory methods instead of constructors 创建对象时尽量考虑静态工厂方法 优点 ---- One advantage...of static factory methods is that, unlike constructors, they have names 静态工厂方法可以通过方法名字来表示创建了什么对象 比如...methods is that, unlike constructors, they can return an object of any subtype of their return type 静态工厂方法可以返回该类的子类...that the class of the returned object need not exist when the class containing the method is written 静态工厂方法创建的对象可以暂时不存在...总结 ---- 当然,构造函数并不是让我们不用,而是有选择的使用,一般场景下,优选考虑使用静态工厂方法ch创建对象。 ----

    16420

    Java架构师教你写代码(一) - 使用静态工厂方法替代构造器

    这适用于基于接口的框架,其中接口为静态工厂方法提供了自然的返回类型。 Java 8 前,接口不能有静态方法。...在 OpenJDK 中,它们返回两种子类之一的一个实例,这取决于底层 enum 类型的大小: 如果它有 64 个或更少的元素,就像大多数 enum 类型一样,静态工厂返回一个 long 类型的 RegularEnumSet...实例 如果 enum 类型有 65 个或更多的元素,工厂将返回一个由 long[] 类型的 JumboEnumSet 实例。...3 缺点 3.1 仅提供静态工厂方法的主要局限是,没有public或protected构造器的类不能被继承 例如,不可能在集合框架中子类化任何便利的实现类。...通过在类或接口文档中多关注静态工厂方法,遵守通用命名约定的方式来减少这个困扰。 下面是一些静态工厂方法的习惯命名。 from,类型转换方法,接收单个参数并返回该类型的相应实例 ?

    68910

    C#的“智能枚举”:在枚举中增加行为?

    然后在 Main 方法中,我们将 today 变量设置为 Tuesday,并使用 ToString() 方法将其转换为字符串。 接下来,我们计算并输出明天和昨天的日子。...我们使用强制类型转换将枚举值转换为整数,然后在取模 7 意义下加或减 1 或 6,以便正确地计算出前一天或后一天的日子。 输出结果应该是这样的: 今天是 Tuesday。...枚举常见的设计模式运用 enum 可以应用在许多种设计模式下: 状态模式 策略模式 工厂模式 观察者模式 介绍 状态模式 状态模式用于根据对象的内部状态来改变其行为。...在 C# 中,您可以使用 switch 语句或 if-else 语句来根据不同的 enum 值选择不同的算法或行为。 工厂模式 工厂模式允许您使用一个共同的接口来创建不同的对象。...enum 可以很好地表示这些对象的类型,因此它是实现工厂模式的常见选择。在 C# 中,您可以使用 switch 语句或 if-else 语句来根据不同的 enum 值创建不同的对象。

    40620

    C# 中的“智能枚举”:如何在枚举中增加行为

    然后在 Main 方法中,我们将 today 变量设置为 Tuesday,并使用 ToString() 方法将其转换为字符串。 接下来,我们计算并输出明天和昨天的日子。...我们使用强制类型转换将枚举值转换为整数,然后在取模 7 意义下加或减 1 或 6,以便正确地计算出前一天或后一天的日子。 输出结果应该是这样的: 今天是 Tuesday。...枚举常见的设计模式运用 enum 可以应用在许多种设计模式下: 状态模式 策略模式 工厂模式 观察者模式 介绍 状态模式 状态模式用于根据对象的内部状态来改变其行为。...在 C# 中,您可以使用 switch 语句或 if-else 语句来根据不同的 enum 值选择不同的算法或行为。 工厂模式 工厂模式允许您使用一个共同的接口来创建不同的对象。...enum 可以很好地表示这些对象的类型,因此它是实现工厂模式的常见选择。在 C# 中,您可以使用 switch 语句或 if-else 语句来根据不同的 enum 值创建不同的对象。

    32420
    领券