Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 关于接口类实现的问题_Actionscript 3_Oop_Design Patterns_Factory Pattern - Fatal编程技术网

Actionscript 3 关于接口类实现的问题

Actionscript 3 关于接口类实现的问题,actionscript-3,oop,design-patterns,factory-pattern,Actionscript 3,Oop,Design Patterns,Factory Pattern,我创建了以下用于共享图像的类。它们实现了一个接口,但我需要一种通过用户交互在它们之间切换的方法。我是这样做的: private var sharingService:PolimorphSharing = new SharingServicesGW('svc1').createService(); 如您所见,服务1和服务2实现了iSharesServices,并从共享中继承 PolimorphSharing是一个简单的抽象类,它实现了我希望从服务1和服务2公开的方法。然后,这些方法将在服务1和服

我创建了以下用于共享图像的类。它们实现了一个接口,但我需要一种通过用户交互在它们之间切换的方法。我是这样做的:

private var sharingService:PolimorphSharing = new SharingServicesGW('svc1').createService();
如您所见,服务1和服务2实现了iSharesServices,并从共享中继承

PolimorphSharing是一个简单的抽象类,它实现了我希望从服务1和服务2公开的方法。然后,这些方法将在服务1和服务2上被重写

因为我需要一种在运行时切换服务的方法,所以我创建了一个从共享继承的网关类。我可以这样称呼它:

private var sharingService:PolimorphSharing = new SharingServicesGW('svc1').createService();
这一切都完美无瑕,我现在可以毫无问题地在服务之间切换。然而,我觉得这有点不对劲,所以我想问你们一些关于如何更好地实现这一点的建议

如有任何意见,将不胜感激。我觉得我是在艰难地实施工厂模式

更新: 只是增加了更多的洞察力。基本上,这里的想法是让我的客户能够通过各种不同的公共共享服务(如imageshack、imgur等)上传图像。我希望我的客户能够选择要发布图像的服务,从而在它们之间进行切换,并与用户交互

执行上传位的方法是requestShareImage,processResults简单地将返回的内容转换为唯一的格式,这样我的客户机就可以始终以相同的方式读取它。getObject是我的访问器,onIOError将处理任何公共API的异常

提前感谢大家,

共享服务GW是一家工厂。然而,它没有必要——也不应该——从共享中继承。而且你做得有点歪。客户端应该使用接口类型的对象,而不是抽象类型的对象。 接口应该定义公共API,而不是抽象基类。事实上,在AS3中,接口只能定义公共成员,而伪抽象类可以强制实现受保护的成员

-编辑-

这里有一个UML图,说明了我将如何做到这一点

在我看来很好,我想不出任何其他模式更合适。我可能错了,但也许你可以让PolimorphSharing将其重命名为SharingService实现IsharingServiceSharingService*,然后服务1和服务2只需扩展PolimorphSharing共享。此外,iSharegService可以将requestShareImage和getObject定义为子类实现的方法,然后PoliMorphShareing可以将processResults和OniError事件处理程序声明为抽象方法。将尝试返回here@Marcos普莱科纳:你能更详细地说明每门课的目的和它们的用途吗方法以及项目的总体目标。我觉得你的问题很有趣+1@Taurayi添加了更多信息,希望它现在更有意义。是的,我同意这一点,但我发现如果客户端使用接口类型的对象,我可以执行addEventListener之类的操作,并且我不能像上面描述的那样在对象之间切换。还是我在这里漏掉了什么东西?“Marcos Placona啊,你已经接受了答案,我正在重新设计你的项目,这就是我为什么要这么做的原因。哦,Ha,我错误地接受了……但是我把它拿出来了。。。如果能看到你的表演,我将不胜感激it@Marcos普莱科纳:我不是说你不接受,我只是说问题已经结束了,真遗憾,我还是会把我的答案贴出来的。不管怎么说,我还在努力,但一些Creynders说的我同意。我真的没有因此而不接受。我之所以这么做,是因为我一开始错误地接受了,因为正如你们在上文中看到的,我仍然有关于@Creynders的答案的问题,并且只有当我所有的问题都澄清之后,我才会真正地接受任何东西。希望他能理解,过早地接受它是一个真正的错误