[JAVA] Zusammengesetztes Muster

Was ist das zusammengesetzte Muster?

Identifizieren Sie den Container und den Inhalt, um eine rekursive Struktur zu erstellen.

Die Rolle des Blattes

Eine Rolle, die den "Inhalt" darstellt. In dieser Rolle kann nichts anderes enthalten sein.

package composite;

public class File extends Entry{
	private String name;
	private int size;

	public File(String name, int size) {
		this.name = name;
		this.size = size;
	}

	@Override
	public String getName() {
		return name;
	}

	@Override
	public int getSize() {
		return size;
	}

	@Override
	protected void printList(String prefix) {
		System.out.println(prefix + "/" + this);
	}
}

Die Rolle von Composite

Eine Rolle, die einen "Container" darstellt. Sie können die Rolle von Leaf oder Composite eingeben.

package composite;

import java.util.ArrayList;
import java.util.Iterator;

public class Directory extends Entry{
	private String name;
	private ArrayList<Entry> directory = new ArrayList<>();

	public Directory(String name) {
		this.name = name;
	}

	@Override
	public String getName() {
		return name;
	}

	@Override
	public int getSize() {
		int size = 0;
		Iterator<Entry> it = directory.iterator();
		while (it.hasNext()) {
			Entry entry = (Entry) it.next();
			size += entry.getSize();
		}
		return size;
	}

	public Entry add(Entry entry) {
		directory.add(entry);
		return this;
	}

	@Override
	protected void printList(String prefix) {
		System.out.println(prefix + "/" + this);
		Iterator<Entry> it = directory.iterator();
		while (it.hasNext()) {
			Entry entry = (Entry) it.next();
			entry.printList(prefix + "/" + name);
		}
	}
}

Die Rolle der Komponente

Eine Rolle, um die Blattrolle mit der zusammengesetzten Rolle gleichzusetzen. Die Komponentenrolle wird als eine Superklasse realisiert, die der Blattrolle und der zusammengesetzten Rolle gemeinsam ist.

package composite;

public abstract class Entry {
	public abstract String getName();
	public abstract int getSize();
	protected abstract void printList(String prefix);

	public Entry add(Entry entry) throws FileTreatmentException {
		throw new FileTreatmentException();
	}

	public void printList() {
		printList("");
	}

	@Override
	public String toString() {
		return getName() + "(" + getSize() + ")";
	}
}

Die Rolle des Kunden

Benutzer des zusammengesetzten Musters.

package composite;

public class Main {
	public static void main(String[] args) {
		try {
			System.out.println("Making root entryies...");
			Directory rootDir = new Directory("root");
			Directory binDir = new Directory("bin");
			Directory tmpDir = new Directory("tmp");
			Directory usrDir = new Directory("usr");
			rootDir.add(binDir);
			rootDir.add(tmpDir);
			rootDir.add(usrDir);
			binDir.add(new File("vi", 10000));
			binDir.add(new File("latex", 20000));
			rootDir.printList();
			
			System.out.println();
			
			System.out.println("Making user entryies...");
			Directory yuki = new Directory("yuki");
			Directory hanako = new Directory("hanako");
			Directory tomura = new Directory("tomura");
			usrDir.add(yuki);
			usrDir.add(hanako);
			usrDir.add(tomura);
			yuki.add(new File("diary.html", 100));
			yuki.add(new File("Composite.java", 200));
			hanako.add(new File("memo.tex", 300));
			tomura.add(new File("game.doc", 400));
			tomura.add(new File("junk.mail", 500));
			rootDir.printList();
		} catch (FileTreatmentException e) {
			e.printStackTrace();
		}
	}
}

Ausführungsergebnis

スクリーンショット 2020-09-09 11.58.42.png

https://github.com/aki0207/composite

Ich habe dies als Referenz verwendet. weniger A8% 80% E8% AA% 9E% E3% 81% A7% E5% AD% A6% E3% 81% B6% E3% 83% 87% E3% 82% B6% E3% 82% A4% E3% 83% B3% E3% 83% 91% E3% 82% BF% E3% 83% BC% E3% 83% B3% E5% 85% A5% E9% 96% 80-% E7% B5% 90% E5% 9F% 8E -% E6% B5% A9 / dp / 4797327030 / ref = sr_1_1? Dh = UTF8 & qid = 1454743284 & sr = 8-1 & keywords = java% E8% A8% 80% E8% AA% 9E% E3% 81% A7% E5% AD% A6% E3% 81% B6% E3% 83% 87% E3% 82% B6% E3% 82% A4% E3% 83% B3% E3% 83% 91% E3% 82% BF% E3% 83% BC% E3% 83% B3% E5% 85% A5% E9% 96% 80 "> Augmented Revised Edition Einführung in in Java gelernte Entwurfsmuster

Recommended Posts

Zusammengesetztes Muster
Zusammengesetztes Muster
Entwurfsmuster ~ Composite ~
Prototypmuster
Erinnerungsmuster
Iteratormuster
Beobachtermuster
Builder-Muster
Brückenmuster
Befehlsmuster
Builder-Muster
Strategiemuster
Iteratormuster
Besuchermuster
Adaptermuster
Proxy-Muster
Strategiemuster
Singleton-Muster
Singleton-Muster
Prototypmuster
Fassadenmuster
Dekorationsmuster
Fliegengewichtsmuster
Dekorateur Muster
Vermittlermuster
Fassadenmuster
Besuchermuster
Brückenmuster
abstraktes Fabrikmuster
Entwurfsmuster ~ Builder ~
[Java] Strategiemuster
Entwurfsmuster ~ Besucher ~
Java-Entwurfsmuster
Java-Rückrufmuster
Entwurfsmuster ~ Proxy ~
Entwurfsmuster ~ Zustand ~
Factory Method Pattern
Entwurfsmuster ~ Strategie ~
Entwurfsmuster ~ Singleton ~
Entwurfsmuster (2): Builder
Entwurfsmuster (1): AbstractFactory
[Java] Singleton-Muster
Entwurfsmuster ~ Befehl ~
Abstraktes Fabrikmuster
zusammengesetzter Schlüssel für den Ruhezustand
Entwurfsmuster ~ Iterator ~
Entwurfsmuster ~ Fassade ~
Entwurfsmuster ~ Brücke ~
Entwurfsmuster ~ Mediator ~
Muster der Vorlagenmethode
Entwurfsmuster ~ Dekorateur ~
Muster der Vorlagenmethode
Entwurfsmuster ~ Interpreter ~
Factory Method Muster
Entwurfsmuster ~ Beobachter ~
Entwurfsmuster ~ Prototyp ~
[Java] Adaptermuster
Entwurfsmuster ~ Memento ~
Entwurfsmuster ~ Adapter ~
Entwurfsmuster ~ Fliegengewicht ~
Java-Muster-Memo