Пример синглтона - PullRequest
       4

Пример синглтона

0 голосов
/ 13 июня 2009

Gang of four использует пример балансировщика нагрузки для демонстрации шаблона синглтона. Мне просто интересно, почему в этом примере нужно использовать синглтон? Есть ли другие реальные примеры, которые конкретно демонстрируют использование шаблона синглтона?

Я просто хочу знать более конкретные причины, по которым я хотел бы предотвратить создание более одного экземпляра объекта. И, я имею в виду, если было более одного экземпляра балансировщика нагрузки, и что?

Ответы [ 4 ]

2 голосов
/ 13 июня 2009

Балансировщик нагрузки не может быть очень эффективным, если одновременно работает более одного из них. Если один балансировщик нагрузки назначает работу устройству, затем появляется другой балансировщик и назначает работу тому же устройству, система может легко выйти из равновесия. Многочисленные балансировщики нагрузки должны были бы общаться друг с другом, чтобы выполнять свою работу. Проще и эффективнее иметь один экземпляр балансировщика.

Другим примером приложения, которое вызывает Singleton, является программный модуль, работа которого заключается в том, чтобы общаться с устройством через последовательный порт. Недавно я реализовал класс для связи с контроллером двигателя, и я хотел быть уверен, что только один класс имеет доступ к последовательной линии. Реализация этого класса как Singleton гарантировала, что два экземпляра никогда не будут созданы, избегая конфликта на последовательной линии.

0 голосов
/ 13 июня 2009

Если у вас есть клиент-серверное приложение, для вашего сервиса может потребоваться только клиент для каждого соединения. Например, мне нужно зарегистрировать обратный вызов в моем сервисе:

public class myClient
{
    public myClient()
    {
        myService = // get service somehow
        myService.Init(myCallback);
    }
    public void myCallback() { /* do something*/}
}

если вы создадите второй экземпляр myClient, вы перезапишете первый обратный вызов вторым.

0 голосов
/ 13 июня 2009

В одном приложении у меня был манифест, который использовался для хранения данных XML, полученных с сервера. Это действовало как тип «кеша» для предотвращения многократных поисков. Вместо того, чтобы передавать ссылку на манифест от объекта к объекту, я создал Singleton, к которому обращались те объекты, которые нуждались в нем во время выполнения.

0 голосов
/ 13 июня 2009

Я просто использовал один для создания движка Flexwiki для приложения ASP.NET, потому что для этого конкретного приложения мне требовались только функции для преобразования синтаксиса вики в HTML. Сам двигатель потребляет много памяти, и мне нужна только небольшая его часть, чтобы выполнить мои требования. Кроме того, он не зависит от отдельного пользователя, поэтому он может храниться в кеше. Иметь другой экземпляр движка было бы бессмысленно, так как он не служит никакой дополнительной цели, кроме как тратить память.

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