我什么时候应该声明抽象方法?
When should I declare abstract methods?
我目前正在开发一个应用程序,它通过不同的网络与系统中的其他应用程序进行通信。目前通过DIS as well as RabbitMQ进行通讯。然而,在内部,应用程序不关心消息是谁发送的或以什么格式发送的。
考虑到这一点,我制作了一个摘要 class,其中包含名为 InternalMessage 的信息,以及一个用于发送和接收这些消息的摘要 class,OrchestrationMessenger。该应用程序轮询 Messengers 以获取传入消息并发回响应。但是,向网络发送消息的过程发生在 class 内部,并且依赖于扩展 InternalMessage.
的具体 class
我知道每个 Concrete class 需要的函数是否应该在 Abstract class 中声明?我了解如何声明这些方法,我只是不知道我是否应该。
例如:将传入消息转换为我的内部格式的函数,反之亦然,从网络读取传入消息,并发送传出消息。
抽象信使:
//Package omitted
import java.util.Queue;
//Comments omitted
public abstract class OrchestrationMessenger <M extends InternalMessage> implements Runnable
{
protected Queue<M> incoming, outgoing;
//Send out a Message, such as responses or commands
public void publish(M message)
{
outgoing.add(message);
}
//Receive next incoming Message Object
public M process()
{
return incoming.poll();
}
//Check if there are any Messages to process
public boolean hasNext()
{
return !incoming.isEmpty();
}
}
谢谢!
是否只在内部使用方法并不重要,决定是否将它们声明为抽象的。
如果您的抽象 class 的每个子 class 都需要此方法,并且每个都有其特定的实现(因此需要在具体的子 classes 中实现),那么将它们作为抽象方法添加到您的抽象 class 中可能是个好主意。
通过这种方式,您可以确定,您所有的实现都有这些方法,可以帮助您获得更清晰的 class 模型和更少的冗余(如果不是现在,那么将来肯定会)。
Should the functions that I know each Concrete class will need, but
that will only be used internally, be declared in the Abstract class ?
要回答这个问题,您必须考虑是否只有具体的子 classes 才需要此方法。
例如,您有 class Person
并且 Person
的每个子 class 需要一个通用方法,即 calculateWeight
其中 returns的权重Person
。你必须说每个 Person
都会有相同的方法来做到这一点。然而,其他 Object
说 Animal
也需要相同的方法来计算动物的重量。请注意,该方法的要求不仅限于 sub classes。那么就不应该在abstact
class。它应该是实用方法,否则在 abstract
parent 中有共同的实现就可以了。
我目前正在开发一个应用程序,它通过不同的网络与系统中的其他应用程序进行通信。目前通过DIS as well as RabbitMQ进行通讯。然而,在内部,应用程序不关心消息是谁发送的或以什么格式发送的。
考虑到这一点,我制作了一个摘要 class,其中包含名为 InternalMessage 的信息,以及一个用于发送和接收这些消息的摘要 class,OrchestrationMessenger。该应用程序轮询 Messengers 以获取传入消息并发回响应。但是,向网络发送消息的过程发生在 class 内部,并且依赖于扩展 InternalMessage.
的具体 class我知道每个 Concrete class 需要的函数是否应该在 Abstract class 中声明?我了解如何声明这些方法,我只是不知道我是否应该。
例如:将传入消息转换为我的内部格式的函数,反之亦然,从网络读取传入消息,并发送传出消息。
抽象信使:
//Package omitted
import java.util.Queue;
//Comments omitted
public abstract class OrchestrationMessenger <M extends InternalMessage> implements Runnable
{
protected Queue<M> incoming, outgoing;
//Send out a Message, such as responses or commands
public void publish(M message)
{
outgoing.add(message);
}
//Receive next incoming Message Object
public M process()
{
return incoming.poll();
}
//Check if there are any Messages to process
public boolean hasNext()
{
return !incoming.isEmpty();
}
}
谢谢!
是否只在内部使用方法并不重要,决定是否将它们声明为抽象的。
如果您的抽象 class 的每个子 class 都需要此方法,并且每个都有其特定的实现(因此需要在具体的子 classes 中实现),那么将它们作为抽象方法添加到您的抽象 class 中可能是个好主意。
通过这种方式,您可以确定,您所有的实现都有这些方法,可以帮助您获得更清晰的 class 模型和更少的冗余(如果不是现在,那么将来肯定会)。
Should the functions that I know each Concrete class will need, but that will only be used internally, be declared in the Abstract class ?
要回答这个问题,您必须考虑是否只有具体的子 classes 才需要此方法。
例如,您有 class Person
并且 Person
的每个子 class 需要一个通用方法,即 calculateWeight
其中 returns的权重Person
。你必须说每个 Person
都会有相同的方法来做到这一点。然而,其他 Object
说 Animal
也需要相同的方法来计算动物的重量。请注意,该方法的要求不仅限于 sub classes。那么就不应该在abstact
class。它应该是实用方法,否则在 abstract
parent 中有共同的实现就可以了。