Plus de détails et d'autres modèles peuvent être trouvés dans ** Comprendre les modèles de conception en comparant les implémentations JavaScript et Java **. J'ai écrit un exemple de JavaScript en regardant Java. Nous ne tirons pas parti des différences de fonctionnalités telles que le type de classe / type de prototype, la force typée et les modificateurs d'accès. (Certains getters ne sont pas nécessaires) Notez s'il vous plaît.
Lorsque beaucoup de choses sont rassemblées, c'est pour les pointer dans l'ordre et effectuer le processus de numérisation de l'ensemble Le mot anglais iterate signifie ** répéter ** quelque chose. Parfois appelé ** répéteur ** en japonais
Il y a plusieurs livres sur l'étagère et un programme qui compte le nombre de livres sur chaque étagère
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 = {};
/**
*Déterminez s'ils ont les mêmes propriétés
* @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 + "classe(une fonction)À" + p + "La méthode n'a pas été déclarée.");
}
}
};
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;
}
}
Le modèle Iterator est un comportement, donc ce serait bien d'avoir hasNext () et next (), non? J'ai l'impression de ne pas pouvoir le réutiliser, donc un peu. .. .. je me sens comme Pour votre référence
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);
Un rôle qui détermine l'interface qui analyse les éléments dans l'ordre Exemple de programme ⇒ Itérateur (interface)
Le rôle qui implémente réellement l'interface définie par le rôle d'itérateur Exemple de programme ⇒ BookShelfIterator (classe)
Le rôle qui définit l'interface qui crée le rôle Iterator Exemple de programme ⇒ Agrégat (interface)
Le rôle qui implémente réellement l'interface définie par le rôle Aggregate Exemple de programme ⇒ BookShelf (classe)
Même si vous n'utilisez pas le modèle Iterator, vous pouvez utiliser une instruction for, etc. La principale raison d'utiliser Iterator est qu'en utilisant Iterator, il est possible de compter séparément de l'implémentation.
Dans cet exemple, il s'agit d'un exemple simple qui ne balaye qu'une seule fois vers l'avant, mais il y en a d'autres.
[Introduction aux modèles de conception appris dans le langage Java augmenté et révisé](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) Modèle JavaScript - Comment faire de bonnes applications
Recommended Posts