gpt4 book ai didi

c# - 管理类之间的共享资源?

转载 作者:太空狗 更新时间:2023-10-29 23:42:24 25 4
gpt4 key购买 nike

想象一下,我有几个用于显示文本的查看器组件,它们几乎没有用户可以切换的模式(用于查看文本/二进制/十六进制的不同字体预设)。管理共享对象的最佳方法是什么——例如字体、查找对话框等?我认为带有延迟初始化对象的静态类是可以的,但这可能是错误的想法。

static class ViewerStatic
{
private static Font monospaceFont;
public static Font MonospaceFont
{
get
{
if (monospaceFont == null)
//TODO read font settings from configuration
monospaceFont = new Font(FontFamily.GenericMonospace, 9, FontStyle.Bold);
return monospaceFont;
}
}

private static Font sansFont;
public static Font SansFont
{
get
{
if (sansFont == null)
//TODO read font settings from configuration
sansFont = new Font(FontFamily.GenericSansSerif, 9, FontStyle.Bold);
return sansFont;
}
}
}

最佳答案

对于您希望创建一次然后重复使用的项目,有两种相关模式:Singleton 和 Cache。如果您将永远重复使用该项目,那么单例就可以了。分配给该实例的内存永远不会被清除。如果您将重复使用该项目一段时间,但可能几天都不会使用该功能,我建议使用缓存。然后当项目不再使用时可以清除内存。

如果您正在使用单例,您可能只想直接初始化字体而不是使用惰性初始化模式。对我来说,字体听起来很简单而且不太可能出错。但是,如果该项目可能在构造过程中失败(可能是由于缺少字体文件或其他原因),那么惰性模式至少允许它在下次重试。如果不重新启动整个应用程序,即使它失败了,您也无法稍后重做静态初始化程序。小心限制这些重试!

最后,您的类“ViewerStatic”的名称引起了关注。有一种称为“上帝”对象的反模式。我称之为“桶”。如果你创造它,东西就会来。你很快就会发现各种各样的东西被倾倒在桶里。您的 ViewerStatic 类将变得巨大。最好有一个名为“FontFlyWeights”的类,然后再有一个名为“ConstantStrings”或“SystemDialogFactory”的类......等等。

关于c# - 管理类之间的共享资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2501950/

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