** Table des matières ** Il y a diverses choses difficiles dans le livre, mais en bref, créer le même objet plusieurs fois est coûteux à bien des égards, alors créez une classe Factory et ne créez une instance qu'une seule fois. Evitons cela. C'est le but de ce modèle.
Utilisez le partage pour prendre en charge efficacement un grand nombre de petits objets.
-Flyweight Classe abstraite d'objets qui doivent générer un grand nombre d'instances identiques ・ Béton Flyweight Classe de béton Flyweight -Classe qui gère la classe UnsharedConcreteFlyweight Flyweight Classe qui contient la classe Flyweight en tant qu'enfant, comme les lignes et les colonnes -FlyweightFactory Classe qui génère une classe Flyweight ・ Utilisateur client
Classe de caractère Classe qui gère un personnage
Character.kt
package flyweight
class Character(private val character: Char) {
fun print() {
print(character)
}
}
Classe de fabrication de caractères Créez une classe d'usine qui crée et regroupe une instance de la classe de caractères. En regroupant les objets une fois créés dans la classe, les objets qui ont été créés auparavant ne seront pas créés à nouveau.
CharacterFactory.kt
package flyweight
//Faites-en un objet singleton
object CharacterFactory {
val characterPool = HashMap<AllCharacter, Character>()
enum class AllCharacter(val value: Char) {
A('A'),
B('B'),
C('C'),
D('D'),
E('E'),
F('F'),
G('G'),
H('H'),
I('I'),
J('J'),
K('K'),
L('L'),
M('M'),
N('N'),
O('O'),
P('P'),
Q('Q'),
R('R'),
S('S'),
T('T'),
U('U'),
V('V'),
W('W'),
X('X'),
Y('Y'),
Z('Z')
}
fun getCharacterObject(characterType: AllCharacter): Character {
//S'il n'est pas généré, regroupez l'instance.
characterPool[characterType]?.let {
return it
} ?: run {
val char = Character(characterType.value)
characterPool[characterType] = char
return char
}
}
}
Les gens qui utilisent des lettres Générez BANANA.
Client.kt
package flyweight
class Client {
init {
val characters = ArrayList<Character>()
// "BANANA"Générer
characters.add(CharacterFactory.getCharacterObject(CharacterFactory.AllCharacter.B))
characters.add(CharacterFactory.getCharacterObject(CharacterFactory.AllCharacter.A))
characters.add(CharacterFactory.getCharacterObject(CharacterFactory.AllCharacter.N))
characters.add(CharacterFactory.getCharacterObject(CharacterFactory.AllCharacter.A))
characters.add(CharacterFactory.getCharacterObject(CharacterFactory.AllCharacter.N))
characters.add(CharacterFactory.getCharacterObject(CharacterFactory.AllCharacter.A))
characters.forEach {
it.print()
}
}
}
[output]
BANANA
Recommended Posts