简单功能的继承(或其他重用方式)
本文关键字:方式 其他 功能 继承 简单 | 更新日期: 2023-09-27 18:03:20
我有一个类,为了控制如何创建实例并确保唯一值,我在类中做了以下操作:
- 将构造函数限制为私有级别,
- 为现有实例创建静态字典
- 一个静态函数,通过键返回字典中现有的或新的项。
下面的例子:
class Foo
{
private Foo() { }
private static Dictionary<string, Foo> FooCollection = new Dictionary<string, Foo>();
public static Foo GetFoo(string key)
{
Foo result;
if (FooCollection.TryGetValue(key, out result) == false)
{
result = new Foo();
FooCollection.Add(key, result);
}
return result;
}
}
我现在有了几个完全相同原理的类。继承在这里是不可能的,因为所有类都将共享同一个Dictionary。
所以有一种方法来重用代码?
根据您发布的内容,您可以将其设置为通用:
class Factory<T> where T:new()
{
private Factory() { }
private static Dictionary<string, T> Inventory = new Dictionary<string, T>();
public static T GetObject(string key)
{
T result;
if (Inventory.TryGetValue(key, out result) == false)
{
result = new T();
Inventory.Add(key, result);
}
return result;
}
}
注意,我称类为Factory
,因为它使用Flyweight Factory模式