.net - 以下场景的最佳设计模式

标签 .net oop design-patterns inheritance interface

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

1- 定义一个 IAlbum 接口(interface)并为每个相册类型定义一个类(实现 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,为每个相册类型定义一个类(实现 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.  

实现这一目标的最佳方法是什么?
感谢并抱歉发了这么长的帖子。

最佳答案

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

   var myFlashAlbum = Album.create(AlbumTypes.FlashAlbum);
   var myJSAlbum = Album.create(AlbumTypes.JSALbum);

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

关于.net - 以下场景的最佳设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4172304/

相关文章:

javascript - createjs.Shape() 不适用于 OOP JavaScript

design-patterns - 结构设计模式和行为设计模式的区别?

design-patterns - 哪种类结构更可取?

c# - streamWriter 重写文件或附加到文件

c# - .net 客户端将 soap 故障解析为协议(protocol)异常

c# - 如何等待 WCF 代理客户端准备好?

php - 带有扩展或接口(interface)的命名空间会导致没有自动加载器的 fatal error

c# - 使用.NET读取oracle表,一个LONG类型的列总是返回空字符串,如何解决?

JAVA动态属性条件求值

c# - C# 中最优雅的 shell 排序方式(梳状/递减增量排序)是什么?