gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 15:09:12 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com