Пожалуйста, дайте мне пример в реальном времени для одноэлементного рисунка. Различные потоки, обращающиеся к общему файлу, однотонные или нет? Поскольку каждый поток обращается к тому же экземпляру файла, а не к отдельным экземплярам.пример для модели Singleton
ответ
Да, но только если все потоки получают доступ к одному файлу, и вы используете собственную реализацию (не java.io.File
, возможно, обертка)
одноэлементный шаблон представляет собой шаблон дизайна, который используется для ограничения экземпляра класса к одному объекту
Одиночные игры (часто плохой выбор) - это классы, которые могут иметь только один экземпляр на протяжении всей программы.
Например, SingletonConfigFile
может выглядеть следующим образом. Имейте в виду, что:
- предназначен для чтения только одного файла. Было бы разумно, чтобы это был файл конфигурации.
- Если ваш класс может быть создан несколько раз, для разных файлов он не является одиночным.
- не используют этот код - он не учитывает проблемы параллелизма, которые являются совершенно другой областью обсуждения.
.
public SingletonConfigFile {
private static String filename = "config.xml";
private File file;
private static SingletonConfigFile instance;
private SingletonConfigFile() {
if (instance != null) {
throw new Error();
}
file = new File(filename);
}
public synchronized SingletonConfigFile getInstance() {
if (instance == null) {
instance = new SignletonConfigFile();
}
return instance
}
public String read() {
// delegate to the underlying java.io.File
}
}
Но этот пример находится на краю смысла. Синглтоны используются в случаях, когда есть только один объект (как я уже говорил выше). Например, это имело бы смысл иметь:
RingOfPower.getInstance()
- есть только одно кольцо силы (Саурона), и не может существовать больше.Sun.getInstance()
- только одна звезда под названием «солнце».- всех объектов в жгутах вашего приложения, которые логически должны существовать только один раз - это реестр, контекст приложения и т.д. «Файл»
А не является объект Java (и java.io.File
определенно не синглтон). Я бы не думал о файлах на диске как о синглете - они просто разделяли ресурсы. В частности, это не так, как есть только один файл на диске :)
Более распространенным примером одноэлементного шаблона является конфигурация - или ведение журнала. Например, LogManager.getLogManager
возвращает «the» LogManager
, и вы не можете создавать новые. Аналогично, у вас может быть один общий объект конфигурации, к которому можно получить доступ статически. (В зависимой инжектированной системе конфигурация может, однако, , но не, однако, вместо этого каждому компоненту предоставляется бит конфигурации, в котором они нуждаются, чтобы им не приходилось брать «общий».)
thx .. в любом случае журналы не написаны в отдельном файле, они записаны только в том же файле. Так я думаю, его синглтон .. что вы думаете? – JavaUser
Синглтоны - это не файлы, а объекты. Одноэлементный объект может получить доступ к сотне файлов или вообще не может потребовать доступа к любому файлу – dbemerlin
Синглтон обычно означает наличие класса, из которого может существовать только один экземпляр.
Релаксация может быть классом с известным общесистемным единственным экземпляром (в дополнение к другим экземплярам, которые вы можете создать).
java.io.File
не является классом Singleton.
Singleton - это дизайн anti-pattern, в котором классу присваивается частный конструктор и специальная «getInstance()», «INSTANCE()» или «instance()» статическая функция, которая отвечает за возвращение (и, возможно, построение, в зависимости от того, используете ли вы ленивые одиночные игры или нет) единственный экземпляр объекта. Синглтоны часто приводят к раздуванию зависимостей, скрывая зависимости и затрудняя издевательство над классом singleton во время модульного тестирования или заменяя синглтон чем-то не одиночным, когда оказывается, что предположение о том, что объект должен быть одноточечным, Фактически.
Решение однотипного анти-шаблона - это использование так называемой «инъекции зависимостей». Вы можете найти этот Google Techtalk, озаглавленный Java on Guice, который объясняет инъекцию зависимостей, просвещать.
Существует еще одна форма одноэлементности, которая не связана с одноэлементным анти-шаблоном ... то есть, если вы только создаете один экземпляр класса и передаете его, но вы не принудительно использовать singleton-ness, используя статическую конструктивную функцию, тогда вы сделали класс эффективно singleton без блокировки себя в зависимости или предотвращения возможности того, что класс не будет использоваться позже. В Google Techtalk, о котором я говорил, ораторы упоминают эту форму singletonness в конце разговора.
В Java J2SE API - два класса Calendar и Runtime являются хорошими примерами реализации Singleton Pattern в реальном времени.
-Arun
Можете ли вы объяснить мне причину? – JavaUser
Календарь не является ничем. – Bozho
Ограничение доступа к конструктору класса автоматически не делает его Singleton. Конструктор класса Calendar защищен, и класс предлагает метод getInstance() для получения экземпляра класса. Однако каждый вызов getInstance() получает новый экземпляр класса. Так что это не * Singleton * – Narayan
Лучший пример реального времени для чтения данных из файла свойство для этого вам нужен только один экземпляр. пожалуйста, найти следующий код, чтобы показать пример
public class SingleTonDesignPattern {
public static SingleTonDesignPattern singleTon = null;
public Properties priperty = null;
private SingleTonDesignPattern() {
}
public static SingleTonDesignPattern getSingleTon() {
return singleTon;
}
public Properties getPriperty() {
return priperty;
}
public void setPriperty(Properties priperty) {
this.priperty = priperty;
}
public static synchronized SingleTonDesignPattern getSingleTonObject() {
if(singleTon == null) {
singleTon = new SingleTonDesignPattern();
Properties properties1 = new Properties();
try {
properties1.load(new FileInputStream("c:/labels.properties"));
singleTon.setPriperty(properties1);
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
return singleTon;
}
}
public class Singleton {
private static Singleton singleton = new Singleton();
/* A private Constructor prevents any other
* class from instantiating.
*/
private Singleton(){ }
/* Static 'instance' method */
public static Singleton getInstance() {
return singleton;
}
/* Other methods protected by singleton-ness */
protected static void demoMethod() {
System.out.println("demoMethod for singleton");
}
}
- 1. Пример Singleton
- 2. Пример запроса Apple Singleton?
- 3. Пример образца Singleton: пилот самолета
- 4. Конкретный пример/Non Singleton
- 5. Пример Singleton от Apple
- 6. Рабочий пример Singleton
- 7. Simple Singleton EJB Пример
- 8. CLLocationManager singleton iphone пример
- 9. Пример внедрения Singleton
- 10. Objective C - пример реализации Singleton
- 11. Пример шаблона Singleton в PHP
- 12. Реализация модели Ember js singleton
- 13. Определение Zend модели, как Singleton
- 14. Являются ли модели Ember singleton?
- 15. модели программирования - пример исследования
- 16. Пример модели Hardcoded ExtJS
- 17. Пример: Наследование класса Singleton - хорошо или плохо?
- 18. Слабость для Singleton в модели памяти Java с синхронизированными блоками
- 19. Пример ассоциированной модели для ManyToManyField в Django
- 20. Пример модели приложения для приложения sailsjs API
- 21. Пример модели сообщений ASP.NET MVC?
- 22. Пример модели MATLAB не открывается
- 23. Решающий пример модели аномального домена
- 24. Отношения Singleton модели с инъекцией зависимостей
- 25. Использовать Singleton для модели OR, где вводить модель в viewmodel?
- 26. Пример расширения пользовательской модели ForeignKey
- 27. django, описание недвижимости пример модели
- 28. Синтаксис для объекта singleton
- 29. Даты тестирования для singleton
- 30. QMessageLogger: Singleton для регистратора?
то, что о моем примере выше файл? – JavaUser
@JavaUser Я обновил свой ответ, чтобы уточнить ваш пример – Bozho
@downvoter Я был бы признателен за ваше обоснование. – Bozho