В Scala, как бы я дал Singleton конструктор? - PullRequest
9 голосов
/ 28 июня 2010

Мой дизайн включает в себя небольшую абстракцию базы данных, благодаря которой я реализую каждую базу данных как Singleton (ну, object), с настраиваемыми методами в базе данных для пары операций, которые вызывает код (это в основном парсер журнала, дамп)интересная статистика для базы данных).

Я бы хотел построить классы базы данных Singleton, если это возможно, чтобы во время выполнения каждый создавался со значениями конфигурации (и эти значения оставались постоянными в течение оставшейся части времени выполнения программы).).Это позволило бы мне также лучше протестировать код (так как я могу смоделировать базы данных с помощью Mockito или чего-то подобного).

Я все еще только изучаю Scala, но, похоже, нет способа прикрепить конструктор кСинглтон, и был бы признателен за любой вклад в эту проблему - есть ли лучший способ сделать то, что я делаю?Есть ли какой-нибудь предпочтительный способ построения синглтона?

Заранее благодарим за любую помощь.

Ответы [ 3 ]

13 голосов
/ 28 июня 2010

Просто поместите код конструктора в тело определения объекта:

object Foo {
    println("Hello") // This will print hello the first time
                     // the Foo object is accessed (and only
                     // that once).
}
4 голосов
/ 28 июня 2010

Вместо того, чтобы использовать синглтон (который сложно проверить). Кто бы ни создавал акторов, он мог бы создать фабрику сеансов базы данных и передать ее каждому актору, тогда он все еще используется ... и может быть проверен.

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

Не уверен, что если это то, что вы ищете, но, как объясняется в статье, используйте метод apply, не расширяя базовый класс

case class Foo(name:String)
object Foo { def apply(name:String) = new Foo(name) }

введите описание ссылки здесь

...