java, одноэлементное обобщение - PullRequest
3 голосов
/ 12 декабря 2011

Учитывая:

File f = new File("test.txt");

таким образом, каждый раз, когда я создаю ссылку на файл "text.txt", я получаю другой объект File.

Мне нужно, чтобы, если файл такой же, то я получал тот же File объект. (Чтобы быть точным и последовательным с примером, это должен быть тот же самый канонический путь, но так как это только пример, я не хочу углубляться в идентичность файлов)Это может быть легко реализовано с помощью статического getInstance, который проверяет ранее созданные экземпляры File, сохраненные в Collection, и возвращает сохраненный экземпляр, если он присутствует.

Это, кажется, "более общий шаблон синглтона", где singletonозначает один экземпляр на приложение, в то время как здесь у нас есть один экземпляр для каждой отдельной идентичности (в этом примере каждый путь к файлу будет иметь только один объект File).

Вопрос , поскольку синглтон хорошо документирован (и, возможно, чрезмерно документирован), этот шаблон также «описан» и стандартизирован?

(Это именно то, что происходитв некоторых реализациях jvm для целых чисел <128 для целей оптимизации, а не на что можно положиться). </p>

Ответы [ 3 ]

5 голосов
/ 12 декабря 2011

Кажется, это называется Multiton или реестр синглетонов.Я не думаю, что он так же хорошо документирован, как сиглет, но, как вы заметили, это действительно более общая версия синглтона, и в ней есть тот же набор сильных и слабых сторон.

1 голос
/ 12 декабря 2011

Разве это не то, что вы действительно хотите, просто CachedReader?

псевдо ::

class CachedConstructor {
  private Object[] cachedThings 
  private Object constructor

  public CachedConstructor(Object thing) {
    this.constructor = thing;
  }

  public Object getThing(string data) {
    if (loc in cachedFiles) {
      return getThingFromCache();
    }
    return putThingInCache(data);
  }
}

new CachedConstructor(File);
1 голос
/ 12 декабря 2011

Может быть, вы найдете инверсию управления и внедрение зависимостей интересной для вашего случая.

Эта статья - хорошее прочтение о синглетонах и DI.http://misko.hevery.com/2008/10/21/dependency-injection-myth-reference-passing/

Оформить заказ Guice например.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...