Шаблон проектирования для системы «Уникальный объект на один идентификатор» - PullRequest
2 голосов
/ 06 октября 2010

У меня есть следующие классы (например, C #)

class A
{
    private static Dictionary<int, A> idLookup;
    ....
    private A(id) {...}
    public static A Get(id) 
    {
        //does some magic
        if (...) { return idLookup[id]; }
        else { A a = new A(id); idLookup[a.id] = a; return a; }
    }
}

class B
{
    private static Dictionary<int, B> idLookup;
    ....
    private B(id) {...}
    public static B Get(id) 
    {
        //does some magic
        if (...) { return idLookup[id]; }
        else { B b = new B(id); idLookup[b.id] = b; return b; }
    }
}
... and so on

Есть ли шаблон проектирования (выполняющий наследование, но немного запутанный), который может удалить весь этот дублирующий код?

Приведенная выше функциональность гарантирует, что для идентификатора существует только 1 экземпляр A / B / ....

1 Ответ

3 голосов
/ 06 октября 2010

Используйте дженерики. Код / псевдокод:

class UniquePattern<T>
{
    private static Dictionary<int, T> idLookup;
    ....
    private T(id) {...}
    public static T Get(id) 
    {
       ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...