我需要一个抽象工厂图案设计的帮助。这个问题是:并行过程的设计帮助的延续。
我真的很困惑应该在哪里初始化每种介质的所有设置(例如: RS232、TCP/IP等等)。
附图是关于我是如何设置模式的:

如图所示,当创建媒体时,每种媒体都会添加一个ICreateMedium接口。我假设Create()方法也创建了适当的对象,比如SerialPort serialPort =新SerialPort("COM1",波特);但是,TCPIPMedium在接口上会出现问题,因为它不需要初始化串行端口对象。
我知道我在这里做了严重的错事。我只是搞不懂,被困了一段时间。
我还感到困惑的是,一旦创建了通信对象,接口IMedium就可以访问它,这样它就可以写出适当的byte[]包。
如有任何指导,将不胜感激。我的主要目标是让Communicator类吐出一个数据包,而不关心哪种类型的媒体是活动的。
发布于 2012-06-08 17:33:51
在这种情况下,如果RS232Medium构造函数需要一个SerialPort,那么您所调用的RS232工厂( RS232MediumCreate )将需要将该端口存储在其中:
(关于Java的事很抱歉)
class RS232MediumCreate implements ICreateMedium {
SerialPort port;
RS232MediumCreate(SerialPort port) {
this.port = port;
}
@Override
public IMedium Create() {
return new Rs232Medium(port);
}
}现在您对Communicator的使用如下所示:
void getMediumFrom(ICreateMedium factory) {
IMedium medium = factory.Create();
//...
}这种方法的用法如下所示:
communicator.getMediumFrom(new RS232MediumCreate(new SerialPort("COM1"), baud));在使用抽象工厂模式时,正如您前面提到的,您的接口必须对齐,因此必须在相应的Factory中考虑到最终对象所需参数的任何差异。
这意味着工厂必须已经知道将使用哪些参数。这是工厂模式的结果,而围绕它工作将无法实现使用抽象工厂的目的。
https://softwareengineering.stackexchange.com/questions/152085
复制相似问题