以下情景的最佳设计模式

我正在努力改进我的编码风格。 考虑以下情况:
假设我想定义一个自定义的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

上一篇: Best Design Pattern for the Following Scenario

下一篇: Bluetooth programming in iPhone