In questo articolo imparerai le dichiarazioni di oggetti (singleton) e le espressioni di oggetti con l'aiuto di esempi.
Dichiarazioni di oggetti
Singleton è un modello orientato agli oggetti in cui una classe può avere solo un'istanza (oggetto).
Ad esempio, stai lavorando su un'applicazione con backend database SQL. Si desidera creare un pool di connessioni per accedere al database riutilizzando la stessa connessione per tutti i client. Per questo, puoi creare la connessione tramite la classe singleton in modo che ogni client ottenga la stessa connessione.
Kotlin fornisce un modo semplice per creare singleton utilizzando la funzione di dichiarazione degli oggetti. Per questo, viene utilizzata la parola chiave object.
oggetto SingletonExample (… // corpo della classe…)
Il codice precedente combina una dichiarazione di classe e una dichiarazione di una singola istanza SingletonExample della classe.
Una dichiarazione di oggetto può contenere proprietà, metodi e così via. Tuttavia, non sono autorizzati ad avere costruttori (il che ha senso). Perché?
Simile agli oggetti di una normale classe, è possibile chiamare metodi e accedere alle proprietà utilizzando la .
notazione.
Esempio: dichiarazione dell'oggetto
object Test ( private var a: Int = 0 var b: Int = 1 fun makeMe12(): Int ( a = 12 return a ) ) fun main(args: Array) ( val result: Int result = Test.makeMe12() println("b = $(Test.b)") println("result = $result") )
Quando esegui il programma, l'output sarà:
b = 1 risultato = 12
La dichiarazione degli oggetti può ereditare da classi e interfacce in modo simile alle normali classi.
Singletons e Dependency Injection
Le dichiarazioni di oggetti possono essere utili a volte. Tuttavia, non sono ideali nei sistemi software di grandi dimensioni che interagiscono con molte altre parti del sistema.
Letture consigliate: Dependency Injection e Singleton Design pattern
Espressioni di oggetti di Kotlin
La parola chiave object può essere utilizzata anche per creare oggetti di una classe anonima nota come oggetti anonimi. Sono usati se è necessario creare un oggetto di una leggera modifica di una classe o interfaccia senza dichiarare una sottoclasse per esso. Per esempio ,
window.addMouseListener (object: MouseAdapter () (override fun mouseClicked (e: MouseEvent) (//…) override fun mouseEntered (e: MouseEvent) (//…)))
(L'esempio è tratto dalla pagina della documentazione ufficiale di Kotlin.)
Qui viene dichiarato un oggetto anonimo che estende la classe MouseAdapter. Il programma sovrascrive due MouseAdapter
metodi: mouseClicked()
e mouseEntered()
.
Se necessario, puoi assegnare un nome all'oggetto anonimo e memorizzarlo in una variabile. Per esempio,
val obj = object: MouseAdapter () (override fun mouseClicked (e: MouseEvent) (//…) override fun mouseEntered (e: MouseEvent) (//…))
Esempio: espressione dell'oggetto Kotlin
open class Person() ( fun eat() = println("Eating food.") fun talk() = println("Talking with people.") open fun pray() = println("Praying god.") ) fun main(args: Array) ( val atheist = object : Person() ( override fun pray() = println("I don't pray. I am an atheist.") ) atheist.eat() atheist.talk() atheist.pray() )
Quando esegui il programma, l'output sarà:
Mangiare cibo. Parlare con le persone. Io non prego. Sono ateo.
Qui, l'oggetto anonimo è memorizzato nella variabile atheist che implementa la classe Person con il pray()
metodo che viene sovrascritto.
Se si implementa una classe che dispone di un costruttore per dichiarare un oggetto anonimo, è necessario passare i parametri del costruttore appropriati. Per esempio,
open class Person(name: String, age: Int) ( init ( println("name: $name, age: $age") ) fun eat() = println("Eating food.") fun talk() = println("Talking with people.") open fun pray() = println("Praying god.") ) fun main(args: Array) ( val atheist = object : Person("Jack", 29) ( override fun pray() = println("I don't pray. I am an atheist.") ) atheist.eat() atheist.talk() atheist.pray() )
Quando esegui il programma, l'output sarà:
nome: Jack, età: 29 Mangiare cibo. Parlare con le persone. Io non prego. Sono ateo.