gpt4 book ai didi

java - java中InetAddress类的静态方法getByname是工厂方法模式的一个例子吗?

转载 作者:行者123 更新时间:2023-11-29 06:05:37 25 4
gpt4 key购买 nike

标准工厂方法设计模式分4类。创作者、产品及其具体实现。

因此对于每个产品,我们需要实例化相应的工厂,该工厂具有创建产品的方法。

但我也看到过这样的场景,人们将构造函数声明为私有(private)的,并有一个静态方法来创建同一个类的对象。类似于我们对单例所做的事情。

例如 getByname 是 InetAddress 的静态方法之一,它根据参数是什么返回其子类之一。人们称之为工厂方法。

这也是工厂方法模式的一个例子吗?它是否在方法中包含 if-else-if 来解码参数或 switch 语句?但是,使用 switch n 条件语句难道不是一种糟糕的 OO 设计实践吗?

最佳答案

是的,这是工厂方法模式的一个例子。

是的,它解析它的参数并决定实例化哪种地址(哪个子类)(通过查看 JDK 附带的方法的源代码很容易找到这一点)。

在某些时候,您必须使用条件语句。这不一定是不好的做法。在这种情况下,工厂方法正是在那里封装地址解析并返回适当的子类,而不是必须在调用者中进行。什么是不好的 OO 实践将被迫写:

int addressType = InetAddress.getAddressType(address);
InetAddress ia = null;
switch (addressType) {
case V4 :
ia = new Inet4Address();
break;
case V6 :
ia = new Inet6Address();
break;
default :
throw new RuntimeException("bad address");
}

相反,此逻辑被封装到工厂方法中。

关于java - java中InetAddress类的静态方法getByname是工厂方法模式的一个例子吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8634824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com