首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >抽象工厂模式的帮助

抽象工厂模式的帮助
EN

Software Engineering用户
提问于 2012-06-08 16:57:14
回答 1查看 428关注 0票数 6

我需要一个抽象工厂图案设计的帮助。这个问题是:并行过程的设计帮助的延续。

我真的很困惑应该在哪里初始化每种介质的所有设置(例如: RS232、TCP/IP等等)。

附图是关于我是如何设置模式的:

如图所示,当创建媒体时,每种媒体都会添加一个ICreateMedium接口。我假设Create()方法也创建了适当的对象,比如SerialPort serialPort =新SerialPort("COM1",波特);但是,TCPIPMedium在接口上会出现问题,因为它不需要初始化串行端口对象。

我知道我在这里做了严重的错事。我只是搞不懂,被困了一段时间。

我还感到困惑的是,一旦创建了通信对象,接口IMedium就可以访问它,这样它就可以写出适当的byte[]包。

如有任何指导,将不胜感激。我的主要目标是让Communicator类吐出一个数据包,而不关心哪种类型的媒体是活动的。

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2012-06-08 17:33:51

在这种情况下,如果RS232Medium构造函数需要一个SerialPort,那么您所调用的RS232工厂( RS232MediumCreate )将需要将该端口存储在其中:

(关于Java的事很抱歉)

代码语言:javascript
复制
class RS232MediumCreate implements ICreateMedium {
    SerialPort port;

    RS232MediumCreate(SerialPort port) {
        this.port = port;
    }

    @Override
    public IMedium Create() {
        return new Rs232Medium(port);
    }
}

现在您对Communicator的使用如下所示:

代码语言:javascript
复制
void getMediumFrom(ICreateMedium factory) {
    IMedium medium = factory.Create();

    //...
}

这种方法的用法如下所示:

代码语言:javascript
复制
communicator.getMediumFrom(new RS232MediumCreate(new SerialPort("COM1"), baud));

在使用抽象工厂模式时,正如您前面提到的,您的接口必须对齐,因此必须在相应的Factory中考虑到最终对象所需参数的任何差异。

这意味着工厂必须已经知道将使用哪些参数。这是工厂模式的结果,而围绕它工作将无法实现使用抽象工厂的目的。

票数 5
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/152085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档