Weitere Details und andere Muster finden Sie in ** Grundlegendes zu Entwurfsmustern durch Vergleichen von JavaScript- und Java-Implementierungen **. Ich habe ein Beispiel für JavaScript geschrieben, indem ich mir Java angesehen habe. Unterschiede in Funktionen wie Klassentyp / Prototypentyp, Typstärke und Zugriffsmodifikatoren werden nicht ausgenutzt. (Einige Getter werden nicht benötigt) Bitte beachten Sie.
Wenn viele Dinge gesammelt werden, dient dies dazu, auf sie zu zeigen und den Vorgang des Scannens des Ganzen durchzuführen Das englische Wort iterate bedeutet ** etwas wiederholen **. Manchmal auf Japanisch ** Repeater ** genannt
Es gibt mehrere Bücher im Bücherregal und ein Programm, das die Anzahl der Bücher in jedem Bücherregal zählt
Main.java
public class Main {
public static void main(String[] args) {
BookShelf bookShelf = new BookShelf(4);
bookShelf.appendBook(new Book("Around the World in 80 Days"));
bookShelf.appendBook(new Book("Bible"));
bookShelf.appendBook(new Book("Chinderella"));
bookShelf.appendBook(new Book("Dabby-Long-Legs"));
Iterator it = bookShelf.iterator();
while (it.hasNext()) {
Book book = (Book)it.next();
System.out.println(book.getName());
}
}
}
Aggregate.java
public interface Aggregate {
public abstract Iterator iterator();
}
BookShelf.java
public class BookShelf implements Aggregate {
private Book[] books;
private int last = 0;
public BookShelf(int maxsize) {
this.books = new Book[maxsize];
}
public Book getBookAt(int index) {
return books[index];
}
public void appendBook(Book book) {
this.books[last] = book;
last++;
}
public int getLength() {
return last;
}
public Iterator iterator() {
return new BookShelfIterator(this);
}
}
Book.java
public class Book {
private String name;
public Book(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
Iterator.java
public interface Iterator {
public abstract boolean hasNext();
public abstract Object next();
}
BookShelfIterator.java
public class BookShelfIterator implements Iterator {
private BookShelf bookShelf;
private int index;
public BookShelfIterator(BookShelf bookShelf) {
this.bookShelf = bookShelf;
this.index = 0;
}
public boolean hasNext() {
if (index < bookShelf.getLength()) {
return true;
} else {
return false;
}
}
public Object next() {
Book book = bookShelf.getBookAt(index);
index++;
return book;
}
}
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Iterator</title>
</head>
<body>
<script src="Main.js"></script>
<script src="Interface.js"></script>
<script src="Aggregate.js"></script>
<script src="BookShelf.js"></script>
<script src="Book.js"></script>
<script src="iterator.js"></script>
<script src="BookShelfIterator.js"></script>
</body>
</html>
Main.js
MAIN = {};
MAIN.init = function() {
var bookShelf = new BookShelf();
bookShelf.appendBook(new Book("Around the World in 80 Days"));
bookShelf.appendBook(new Book("Bible"));
bookShelf.appendBook(new Book("Chinderella"));
bookShelf.appendBook(new Book("Dabby-Long=legs"));
var it = bookShelf.iterator();
while (it.hasNext()) {
var book = it.next();
console.log(book.name);
}
};
window.addEventListener("load", MAIN.init);
Interface.js
/**
* @namespace INTERFACE
*/
INTERFACE = {};
/**
*Stellen Sie fest, ob sie dieselben Eigenschaften haben
* @static
* @method implements
*/
INTERFACE.implements = function(child, Pr) {
var parent = new Pr();
for (var p in parent) {
if (!(p in child)) {
console.error(child.constructor.name + "Klasse(Funktion)Zu" + p + "Die Methode wurde nicht deklariert.");
}
}
};
Aggregate.js
var Aggregate = function() {};
Aggregate.prototype.iterator = function() {};
BookShelf.js
var BookShelf = function() {
this.books = [];
this.last = 0;
INTERFACE.implements(this, Aggregate);
};
BookShelf.prototype = {
constructor: BookShelf,
getBookAt: function(index) {
return this.books[index];
},
appendBook: function(book) {
this.books[this.last] = book;
this.last += 1;
},
getLength: function() {
return this.last;
},
iterator: function() {
return new BookShelfIterator(this);
}
};
Book.js
var Book = function(name) {
this.name = name;
};
Book.prototype.getName = function() {
return this.name;
};
Iterator.js
var Iterator = function() {};
Iterator.prototype = {
constructor: Iterator,
hasNext: function() {},
next: function() {}
};
BookShelfIterator.js
var BookShelfIterator = function(bookShelf) {
this.bookShelf = bookShelf;
this.index = 0;
INTERFACE.implements(this, Iterator);
};
BookShelfIterator.prototype = {
constructor: BookShelfIterator,
hasNext: function() {
if (this.index < this.bookShelf.getLength()) {
return true;
} else {
return false;
}
},
next: function() {
var book = this.bookShelf.getBookAt(this.index);
this.index += 1;
return book;
}
}
Das Iterator-Muster ist Verhalten, also wäre es schön, hasNext () und next () zu haben, oder? Ich habe das Gefühl, ich kann es nicht wiederverwenden, also ein bisschen. .. .. ich fühle mich wie Als Referenz
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Iterator</title>
</head>
<body>
<script src="Main.js"></script>
</body>
</html>
Main.js
MAIN = {};
MAIN.init = function() {
while(egg.hasNext()) {
console.log(egg.next());
}
};
var egg = (function() {
var index = 0,
data = [1, 2, 3, 4, 5],
length = data.length;
return {
next: function() {
var element;
if (!this.hasNext()) {
return null;
}
element = data[index];
index = index + 1;
return element;
},
hasNext: function() {
return index < length;
}
};
}());
window.addEventListener("load", MAIN.init);
Eine Rolle, die die Schnittstelle bestimmt, die Elemente der Reihe nach scannt Beispielprogramm ⇒ Iterator (Schnittstelle)
Die Rolle, die die durch die Rolle des Iterators definierte Schnittstelle tatsächlich implementiert Beispielprogramm ⇒ BookShelfIterator (Klasse)
Die Rolle, die die Schnittstelle definiert, die die Iterator-Rolle erstellt Beispielprogramm ⇒ Aggregat (Schnittstelle)
Die Rolle, die die durch die Aggregatrolle definierte Schnittstelle tatsächlich implementiert Beispielprogramm ⇒ BookShelf (Klasse)
Auch wenn Sie das Iterator-Muster nicht verwenden, können Sie eine for-Anweisung usw. verwenden. Der Hauptgrund für die Verwendung von Iterator ist, dass mit Iterator getrennt von der Implementierung gezählt werden kann.
In diesem Beispiel ist es ein einfaches Beispiel, das nur einmal vorwärts gescannt wird, aber es gibt andere.
[Einführung in Entwurfsmuster, die in der erweiterten und überarbeiteten Java-Sprache gelernt wurden](https://www.amazon.co.jp/%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82% E7% 89% 88Java% 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-% E7% B5 % 90% E5% 9F% 8E-% E6% B5% A9 / dp / 4797327030) JavaScript-Muster - wie man gute Anwendungen macht
Recommended Posts