** Inhaltsverzeichnis ** ** Bauen Sie die Klasse mit einer Holzstruktur zusammen. Es scheint ein Muster zu sein, das aus Objekten besteht, die als zusammengesetzt und Blatt bezeichnet werden, wie in **.
Teile Objekte zu einer Baumstruktur zusammen, um die gesamte Hierarchie darzustellen. Das zusammengesetzte Muster ermöglicht es dem Client, einzelne Objekte und ihre Verbundstoffe einheitlich zu behandeln.
· Zusammenfassung der Komponenten Root, Node, Leaf Abstract Class ・ Blattblatt ・ Zusammengesetzte Wurzel oder Knoten ・ Client-Benutzer
Wenn Sie das Wort "Baumstruktur" hören, können Sie sich einen Verzeichnisbaum vorstellen. Implementieren Sie daher ein Programm, das den Verzeichnisbaum verwalten und ausgeben kann.
Das Verzeichnis ist zusammengesetzt und die Datei ist Blatt.
Verzeichnis- und Dateischnittstelle
Element.kt
package composite
interface Element {
enum class ElementType(val type: String) {
DIRECTORY("Direcotry"),
FILE("File")
}
fun getType(): ElementType
fun getName(): String
}
Verzeichnis abstrakte Klasse
Haben Sie eine Elementliste, damit Sie die Elemente unter Ihrer Kontrolle verwalten können.
AbstractDirectory.kt
package composite
abstract class AbstractDirectory: Element {
var elementList: MutableList<Element> = mutableListOf()
abstract fun addElement(element: Element)
}
Verzeichnis konkrete Klasse
Directory.kt
package composite
class Directory(private val name: String): AbstractDirectory() {
override fun getType(): Element.ElementType {
return Element.ElementType.DIRECTORY
}
override fun addElement(element: Element) {
elementList.add(element)
}
override fun getName(): String {
return name
}
}
Datei konkrete Klasse
File.kt
package composite
class File(private val name: String): Element {
override fun getType(): Element.ElementType {
return Element.ElementType.FILE
}
override fun getName(): String {
return name
}
}
Die Person, die den Verzeichnisbaum verwaltet
DirectoryManager.kt
package composite
class DirectoryManager {
init {
//Root-Verzeichnis
val rootDirectory = Directory("/")
rootDirectory.addElement(File("sample.config"))
rootDirectory.addElement(File("gof.env"))
//Ordner für iOS-Apps
val iosDirectory = Directory("iOS")
val iosAppDirectory = Directory("GofiOSApp")
iosAppDirectory.addElement(File("xcode.project"))
val iosAppSourceDirectory = Directory("Source")
iosAppSourceDirectory.addElement(File("hoge.swift"))
iosAppSourceDirectory.addElement(File("fuga.swift"))
iosDirectory.addElement(iosAppDirectory)
iosAppDirectory.addElement(iosAppSourceDirectory)
rootDirectory.addElement(iosDirectory)
//Ordner für Android Apps
val androidDirectory = Directory("AndroidOS")
val androidAppDirectory = Directory("GofAndroidApp")
androidAppDirectory.addElement(File("AndroidManifest.xml"))
val androidAppSourceDirectory = Directory("Source")
androidAppSourceDirectory.addElement(File("moge.kt"))
androidAppSourceDirectory.addElement(File("unbaba.kt"))
androidDirectory.addElement(androidAppDirectory)
androidAppDirectory.addElement(androidAppSourceDirectory)
rootDirectory.addElement(androidDirectory)
show(rootDirectory, 0)
}
private fun show(element: Element, indent: Int) {
if (element is Directory) {
println("${"----".repeat(indent)}【${element.getType().type}】${element.getName()}")
element.elementList.forEach {
show(it, indent + 1)
}
} else {
println("${"----".repeat(indent)}【${element.getType().type}】${element.getName()}")
}
}
}
Dies vervollständigt den Verzeichnisbaum unter Verwendung des zusammengesetzten Musters.
[output]
【Direcotry】/
----【File】sample.config
----【File】gof.env
----【Direcotry】iOS
--------【Direcotry】GofiOSApp
------------【File】xcode.project
------------【Direcotry】Source
----------------【File】hoge.swift
----------------【File】fuga.swift
----【Direcotry】AndroidOS
--------【Direcotry】GofAndroidApp
------------【File】AndroidManifest.xml
------------【Direcotry】Source
----------------【File】moge.kt
----------------【File】unbaba.kt
Wenn Sie den Ordner / iOS / GofIosApp / Source derselben Hierarchie duplizieren möchten, fügen Sie "iosAppDirectory.addElement (iosAppSourceDirectory)" hinzu.
[output]
【Direcotry】/
----【File】sample.config
----【File】gof.env
----【Direcotry】iOS
--------【Direcotry】GofiOSApp
------------【File】xcode.project
------------【Direcotry】Source
----------------【File】hoge.swift
----------------【File】fuga.swift
------------【Direcotry】Source
----------------【File】hoge.swift
----------------【File】fuga.swift
Abkürzung
Sie können das Verzeichnis frei bearbeiten.
Recommended Posts