gpt4 book ai didi

java - 在 Java 中使用带有多个参数的工厂模式

转载 作者:行者123 更新时间:2023-11-30 08:23:22 25 4
gpt4 key购买 nike

我有以下类结构:包含一些公共(public)成员(/字段)的基类“消息”,'Imessage' 接口(interface)有一些所有消息都应该实现的方法,许多不同的消息类扩展(继承)了基本的“消息”类并有很多字段,每个消息类型的枚举和工厂类,给定枚举创建适当的消息类的实例。

问题是我不确定在哪里/如何为每个消息类实现值设置。它不能在它的构造函数中,因为在工厂方法中我需要构建通用实例。我应该为每条消息实现一个“创建”方法来设置它的所有成员吗?

    public static Message buildMessage(MessageType messageType)
{
Message message = null;
switch (messageType) //TODO: add all messages!
{
case CONNECT:
message = new ConnectMessage();
break;
case CONNECT_RESPONSE:
message = new ConnectResponseMessage();
break;
case DISCONNECT:
message = new DisconnectMessage();
break;
case FLOWSTART:
message = new FlowStartMessage();
break;
default: return null;
}

return message;
}

最佳答案

工厂模式应该返回一个有效的、完全填充的对象,因此为每种类型的 Message 对象添加一个 Create 方法并不理想(除非它是从 buildMessage 中调用的)。

我不知道你说的是什么意思:

It can't be in it's constructor because in the factory method i need to build generic instances.

像这样初始化一个对象是完全有效的:

Message message = new ComplexMessage(type, value, something, somethingElse);
Message message = new LessComplexMessage(type, value);

在这种情况下,您的 buildMessage 方法可以接收构建消息的所有子类型所需的所有对象。

如果由于必填字段的变化太多而变得太复杂,那么可能值得升级到构建器模式:

http://javarevisited.blogspot.co.uk/2012/06/builder-design-pattern-in-java-example.html

关于java - 在 Java 中使用带有多个参数的工厂模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23720140/

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