I denne artikel lærer du om objektdeklarationer (singletoner) og objektudtryk ved hjælp af eksempler.
Objekterklæringer
Singleton er et objektorienteret mønster, hvor en klasse kun kan have en forekomst (objekt).
For eksempel arbejder du med et program, der har SQL-database-backend. Du vil oprette en forbindelsespulje for at få adgang til databasen, mens du genbruger den samme forbindelse til alle klienter. Til dette kan du oprette forbindelsen gennem singleton-klasse, så hver klient får den samme forbindelse.
Kotlin giver en nem måde at oprette singletoner ved hjælp af objektdeklarationsfunktionen. Til det bruges objektnøgleord.
objekt SingletonExample (… // body of class…)
Ovenstående kode kombinerer en klassedeklaration og en erklæring fra en enkelt instans SingletonEksempel på klassen.
En objekterklæring kan indeholde egenskaber, metoder og så videre. Imidlertid har de ikke lov til at have konstruktører (hvilket giver mening). Hvorfor?
Svarende til objekter af en normal klasse kan du kalde metoder og få adgang til egenskaber ved hjælp af .
notationen.
Eksempel: Objekterklæring
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") )
Når du kører programmet, vil output være:
b = 1 resultat = 12
Objekterklæring kan arve fra klasser og grænseflader på en lignende måde som normale klasser.
Singletons og afhængighedsinjektion
Objektdeklarationer kan nogle gange være nyttige. De er dog ikke ideelle i store softwaresystemer, der interagerer med mange andre dele af systemet.
Anbefalet læsning: Dependency Injection & Singleton Design mønster
Kotlin objekt udtryk
Objektnøgleordet kan også bruges til at oprette objekter i en anonym klasse kendt som anonyme objekter. De bruges, hvis du har brug for at oprette et objekt med en lille ændring af en klasse eller interface uden at erklære en underklasse for det. For eksempel ,
window.addMouseListener (objekt: MouseAdapter () (tilsidesætte sjov musKlikkede (e: MouseEvent) (//…) tilsidesætte sjov mouseEntered (e: MouseEvent) (//…)))
(Eksemplet er taget fra den officielle Kotlin-dokumentside.)
Her erklæres et anonymt objekt, der udvider MouseAdapter-klassen. Programmet tilsidesætter to MouseAdapter
metoder: mouseClicked()
og mouseEntered()
.
Om nødvendigt kan du tildele et navn til det anonyme objekt og gemme det i en variabel. For eksempel,
val obj = object: MouseAdapter () (tilsidesæt sjov musKlikkede (e: MouseEvent) (//…) tilsidesætter sjov mouseEntered (e: MouseEvent) (//…))
Eksempel: Kotlin-objektudtryk
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() )
Når du kører programmet, vil output være:
Spiser mad. At tale med mennesker. Jeg beder ikke. Jeg er ateist.
Her lagres anonymt objekt i variabel ateist, som implementerer Personklasse med pray()
metode tilsidesættes.
Hvis du implementerer en klasse, der har en konstruktør til at erklære et anonymt objekt, skal du videregive passende konstruktorparametre. For eksempel,
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() )
Når du kører programmet, vil output være:
navn: Jack, alder: 29 Spiser mad. At tale med mennesker. Jeg beder ikke. Jeg er ateist.