Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗dtOpStSg 88 of 113 menu
◀ ▶

Один экземпляр класса в Dart

Иногда тип должен существовать в единственном экземпляре. Конструктор делают приватным Post._(), а единственный объект хранят в static final. Снаружи доступно только поле instance:

class Post { Post._(); static final Post instance = Post._(); String title = ""; } var a = Post.instance; var b = Post.instance; print(identical(a, b)); print(a.title);

Функция identical сравнивает ссылки. Для двух обращений к Post.instance результат true - это один и тот же объект в памяти.

Такой прием называют singleton - «одиночка». Им пользуются для общих настроек, счетчиков и кэша, когда несколько копий сломали бы смысл задачи. Состояние можно хранить в полях этого единственного объекта:

class Post { Post._(); static final Post instance = Post._(); int total = 0; void hit() { total = total + 1; } } Post.instance.hit(); Post.instance.hit(); print(Post.instance.total);

Если нужны много независимых записей, подходит обычный публичный конструктор. Приватный конструктор и static final instance выбирают, когда общий доступ к одному объекту - часть дизайна, а не случайность. Фабричный конструктор тоже может возвращать тот же instance вместо нового объекта.

Сделайте класс Employee с приватным конструктором, полем static final instance и свойством token со значением "abc". Сохраните ссылки в first и second, обе равные Employee.instance. Выведите результат identical(first, second).

Дан следующий код:

class Employee { Employee._(); static final Employee instance = Employee._(); int total = 0; void register() { total = total + 1; } }

Вызовите register два раза через Employee.instance и выведите total.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить