If statement 我必须使用工厂设计模式还是州设计模式

If statement 我必须使用工厂设计模式还是州设计模式,if-statement,design-patterns,factory-pattern,state-pattern,If Statement,Design Patterns,Factory Pattern,State Pattern,在我的应用程序中,用户将输入图像或视频的链接。根据Pinterest的媒体图像、视频或Pin的类型,应用程序将确定如何显示输入的媒体链接的缩略图,例如: 如果输入的链接是视频,则从视频生成缩略图,然后生成显示缩略图的HTML代码段 如果是图像,请减小大小并返回HTML代码段,其中较小的图像作为缩略图 如果是Pinterest链接,生成嵌入Pinterest HTML代码 无论是什么类型的链接,它都可能有一个prepThumbnail方法,返回缩略图图像,还有一个getThumbnailSnipp

在我的应用程序中,用户将输入图像或视频的链接。根据Pinterest的媒体图像、视频或Pin的类型,应用程序将确定如何显示输入的媒体链接的缩略图,例如:

如果输入的链接是视频,则从视频生成缩略图,然后生成显示缩略图的HTML代码段

如果是图像,请减小大小并返回HTML代码段,其中较小的图像作为缩略图

如果是Pinterest链接,生成嵌入Pinterest HTML代码

无论是什么类型的链接,它都可能有一个prepThumbnail方法,返回缩略图图像,还有一个getThumbnailSnippet,返回带有图像链接的HTML代码

为了避免使用if语句并能够增加媒体链接的类型,我决定使用

状态模式

在这里,我将捕获链接,无论媒体类型是什么,作为MediaLink对象/上下文,并且在该对象中,我可以在运行时将状态设置为HasImage状态/对象,该状态具有与图像链接兼容的方法PrepThumbThumbNailSnippet和getThumbnailSnippet,并生成缩略图和我将嵌入的代码段

所以我只需要添加一个HasVideo状态,HasPin状态

我也在想

工厂方法还是抽象工厂模式

在这里,我创建了ImageLinkFactory、VideoLinkFactory、PinterestFactory,并让它们各自创建我需要的“MediaLink”类型

以下哪种模式更适合我的用例? 什么来源有足够的例子来训练我识别每个案例使用什么模式?讨论现实生活场景的东西,而不仅仅是基本的卡车工厂和汽车工厂。 将不是我的第一选择,因为您不需要更改任何处理不同文件类型的状态,除非用户以特定顺序输入不同类型的文件或类似的场景

事实上,可以帮助您实例化对象,但这是您最初可能不需要的,因为您也可以在启动时一次实例化所有文件类型的实现

您可能希望使用,其中您的策略接口包含您描述的常用方法,并且您的策略实现包含其特定于文件类型的实现。在引导应用程序时,您可以为这些实现注册它们应该处理的关联类型。 这使得添加对新类型的支持变得非常容易,您只需要创建一个新的策略实现并注册它

您可以在许多开源项目中找到设计模式的实际用法,例如在