我必须使用工厂设计模式还是状态设计模式
Would I have to use Factory design pattern or State Design pattern
在我的应用程序中,用户会为图像或视频输入 link。根据媒体类型(图片、视频或来自 Pinterest 的 Pin 图),应用程序将确定如何显示输入媒体的缩略图 link,例如:
如果 link 输入的是视频,则从视频生成缩略图,然后生成将显示缩略图的 HTML 代码片段。
如果是图片,请缩小尺寸并 return HTML 将较小的图片作为缩略图的片段。
如果 Pinterest link,生成嵌入 Pinterest HTML 代码。
无论是什么类型的 link,它都可能有一个 prepThumbnail()
方法来 return 缩略图和一个 getThumbnailSnippet()
方法 return 带有图像 link 的 HTML 代码。
为了避免使用 if 语句并能够增加媒体类型 link,我决定使用
状态模式
我将捕获 link,无论媒体类型是什么,作为 MediaLink
object/context 并且在该对象中我可以将状态设置为 运行 时间HasImage
state/object 具有与图像 link 兼容的方法 prepThumbnail()
和 getThumbnailSnippet()
并生成我将嵌入的缩略图和代码片段.
所以我只需要添加一个HasVideo
状态,HasPin
状态。
我也在考虑
工厂方法或抽象工厂模式
我在其中创建了 ImageLinkFactory
、VideoLinkFactory
、PinterestFactory
并分别创建了我需要的 `MediaLink 类型。
- 以下哪种模式更适合我的用例?
- 哪个来源有足够的例子来训练我识别每种情况下使用什么模式?讨论现实生活场景的东西,而不仅仅是基本的 TruckFactory 和 CarFactory。
state pattern 不是我的第一选择,因为您不需要更改任何状态来处理不同的文件类型,除了例如用户按特定顺序或某些顺序输入不同类型的文件那样的场景。
factory pattern 确实可以帮助您实例化您的对象,但这可能不是您最初需要的东西,因为您也可以只在启动时实例化所有文件类型的实现。
您可能想使用 strategy pattern,其中您的策略接口包含您描述的常用方法,而您的策略实现包含文件类型特定的实现。在引导您的应用程序时,您可以为它们应该处理的关联类型注册这些实现。
这使得添加对新类型的支持变得非常容易,您只需要创建一个新的策略实现并注册它。
您可以在许多开源项目中找到设计模式的实际用法,例如在 Java.
在我的应用程序中,用户会为图像或视频输入 link。根据媒体类型(图片、视频或来自 Pinterest 的 Pin 图),应用程序将确定如何显示输入媒体的缩略图 link,例如:
如果 link 输入的是视频,则从视频生成缩略图,然后生成将显示缩略图的 HTML 代码片段。
如果是图片,请缩小尺寸并 return HTML 将较小的图片作为缩略图的片段。
如果 Pinterest link,生成嵌入 Pinterest HTML 代码。
无论是什么类型的 link,它都可能有一个 prepThumbnail()
方法来 return 缩略图和一个 getThumbnailSnippet()
方法 return 带有图像 link 的 HTML 代码。
为了避免使用 if 语句并能够增加媒体类型 link,我决定使用
状态模式
我将捕获 link,无论媒体类型是什么,作为 MediaLink
object/context 并且在该对象中我可以将状态设置为 运行 时间HasImage
state/object 具有与图像 link 兼容的方法 prepThumbnail()
和 getThumbnailSnippet()
并生成我将嵌入的缩略图和代码片段.
所以我只需要添加一个HasVideo
状态,HasPin
状态。
我也在考虑
工厂方法或抽象工厂模式
我在其中创建了 ImageLinkFactory
、VideoLinkFactory
、PinterestFactory
并分别创建了我需要的 `MediaLink 类型。
- 以下哪种模式更适合我的用例?
- 哪个来源有足够的例子来训练我识别每种情况下使用什么模式?讨论现实生活场景的东西,而不仅仅是基本的 TruckFactory 和 CarFactory。
state pattern 不是我的第一选择,因为您不需要更改任何状态来处理不同的文件类型,除了例如用户按特定顺序或某些顺序输入不同类型的文件那样的场景。
factory pattern 确实可以帮助您实例化您的对象,但这可能不是您最初需要的东西,因为您也可以只在启动时实例化所有文件类型的实现。
您可能想使用 strategy pattern,其中您的策略接口包含您描述的常用方法,而您的策略实现包含文件类型特定的实现。在引导您的应用程序时,您可以为它们应该处理的关联类型注册这些实现。 这使得添加对新类型的支持变得非常容易,您只需要创建一个新的策略实现并注册它。
您可以在许多开源项目中找到设计模式的实际用法,例如在 Java.