Лучший шаблон дизайна для следующего сценария

Я пытаюсь улучшить свой стиль программирования. Рассмотрим следующий сценарий:
Предположим, я хочу определить настраиваемый серверный элемент управления 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.  
  }  

Итак, если пользователю нужен флэш-альбом, он должен явно создать объект FlashAlbum. что-то вроде:

var myFlashAlbum = new FlashAlbum(/*FlashAlbumParameters*/);  
var myJSAlbum = new JSAlbum(/*JSAlbumParameters*/);  

Проблема в том, что я не хочу, чтобы пользователю приходилось иметь дело с несколькими типами альбомов. Прочтите ниже, чтобы понять, что я имею в виду.

2- Определите IAlbum, определите класс (который реализует IAlbum) для каждого типа альбома (как указано выше) и определите класс Album , который не 1175363] реализовать IAlbum. Он используется для создания экземпляров альбома в его конструкторе (заводской шаблон). Определение EnumAlbumTypes:

Public Enum AlbumTypes  
{  
    FlashAlbum,  
    JSAlbum  
}  

Теперь определите конструктор для родительского класса альбома, который принимает параметр типа EnumAlbumTypes и создает соответствующий альбом на основе этого параметра. Я предпочитаю этот метод. Но я не очень хорошо знаком с заводским шаблоном. Я хочу, чтобы пользователь создавал такие альбомы, как:

var myFlashAlbum = new Album(AlbumTypes.FlashAlbum);  
// Now set FlashAlbum custom properties.
var myJSAlbum = new Album(AlbumTypes.JSAlbum);
// Now set JSAlbum custom properties.  

Как лучше всего достичь этого?
Спасибо и извините за длинный пост.

7
задан Kamyar 13 November 2010 в 11:51
поделиться