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

时间:2014-05-13 13:42:03

标签: c# .net oop

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

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

    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。

    所以有一种方法可以重用代码吗?

1 个答案:

答案 0 :(得分:6)

根据您发布的内容,您可以将其设为通用:

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 pattern