以下情景的最佳设计模式
我正在努力改进我的编码风格。 考虑以下情况:
假设我想定义一个自定义的ASP.Net Album服务器控件。 目的是让用户选择专辑类型,其他所有内容将由控制器执行。
我曾想过两种方法:
1-定义一个IAlbum接口并为每个相册类型定义一个类(实现IAlbum)。 例如:
public class FlashAlbum : IAlbum
{
// Implement IAlbum Methods...
// FlashAlbum-Specific Properties/Methods.
}
public class JSAlbum : IAlbum
{
// Implement IAlbum Methods...
// JSAlbum-Specific Properties/Methods.
}
所以如果用户想要一个flash专辑,他应该明确地创建一个FlashAlbum对象。 就像是:
var myFlashAlbum = new FlashAlbum(/*FlashAlbumParameters*/);
var myJSAlbum = new JSAlbum(/*JSAlbumParameters*/);
问题是我不希望用户必须处理多个相册类型。 阅读下面了解我的意思。
2-定义IAlbum,为每个Album类型定义一个类(实现IAlbum)(如上所述)并定义不实现IAlbum的Album
类。 它用于在其构造器(工厂模式)中创建相册实例。 定义EnumAlbumTypes:
Public Enum AlbumTypes
{
FlashAlbum,
JSAlbum
}
现在为Album Parent类定义一个构造函数,该类使用EnumAlbumTypes类型的参数并根据该参数创建适当的相册。 我更喜欢这种方法。 但我对工厂模式不是很熟悉。 我希望用户创建相册,如:
var myFlashAlbum = new Album(AlbumTypes.FlashAlbum);
// Now set FlashAlbum custom properties.
var myJSAlbum = new Album(AlbumTypes.JSAlbum);
// Now set JSAlbum custom properties.
实现这一目标的最佳方法是什么?
感谢并且为这篇长文章感到遗憾。
当您想封装关于要创建的特定对象类型的决定时,Factory模式是一个很好的选择。 create方法应该返回一个Album类型,所以它会是:
var myFlashAlbum = Album.create(AlbumTypes.FlashAlbum);
var myJSAlbum = Album.create(AlbumTypes.JSALbum);
如果构建相册的过程显着不同,则可能需要考虑构建器模式。 它允许你封装复杂的创建逻辑。
如果你不想让用户关心他们拥有什么样的专辑,那你为什么还要给他们选择呢?
继承似乎是正确的选择。 我没有看到任何有利于其他选择的证据或论据。
链接地址: http://www.djcxy.com/p/48857.html