简单功能的继承(或其他重用方式)

本文关键字:方式 其他 功能 继承 简单 | 更新日期: 2023-09-27 18:03:20

我有一个类,为了控制如何创建实例并确保唯一值,我在类中做了以下操作:

  1. 将构造函数限制为私有级别,
  2. 为现有实例创建静态字典
  3. 一个静态函数,通过键返回字典中现有的或新的项。

下面的例子:

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模式