以下场景的最佳设计模式

Kam*_*yar 7 .net oop inheritance design-patterns interface

我正在努力改进我的编码风格.请考虑以下情形:
假设我要定义自定义ASP.Net相册服务器控件.目的是让用户选择相册类型,所有其他内容将由控件执行.
我考虑过两种方法:

1-定义IAlbum接口并为每个Album类型定义一个类(实现IAlbum).例如:

  public class FlashAlbum : IAlbum  
  {  
  // Implement IAlbum Methods...  
  // FlashAlbum-Specific Properties/Methods.  
  }  
  public class JSAlbum : IAlbum  
  {  
  // Implement IAlbum Methods...   
  // JSAlbum-Specific Properties/Methods.  
  }  
Run Code Online (Sandbox Code Playgroud)

因此,如果用户想要一个flash专辑,他应该明确地创建一个FlashAlbum对象.就像是:

var myFlashAlbum = new FlashAlbum(/*FlashAlbumParameters*/);  
var myJSAlbum = new JSAlbum(/*JSAlbumParameters*/);  
Run Code Online (Sandbox Code Playgroud)

问题是我不希望用户必须处理多种相册类型.请阅读以下内容以了解我的意思.

2-定义IAlbum,定义一个类(该类实现IAlbum)对于每个专辑类型(就像上文),并定义Album哪些类实现IAlbum.它用于在其构造函数(工厂模式)中创建相册实例.定义EnumAlbumTypes:

Public Enum AlbumTypes  
{  
    FlashAlbum,  
    JSAlbum  
}  
Run Code Online (Sandbox Code Playgroud)

现在为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.  
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳方法是什么?
谢谢和抱歉长篇文章.

Vin*_*nie 4

当您想要封装有关要创建的特定对象类型的决策时,工厂模式是一个不错的选择。创建方法应该返回一个相册类型,因此它将是:

   var myFlashAlbum = Album.create(AlbumTypes.FlashAlbum);
   var myJSAlbum = Album.create(AlbumTypes.JSALbum);
Run Code Online (Sandbox Code Playgroud)

如果构建相册的过程明显不同,您可能需要考虑构建器模式。它允许您封装复杂的创建逻辑。