Pour apprendre le concept d'interface et la réutilisabilité des objets, qui sont importants dans l'orientation des objets ["Introduction aux modèles de conception appris en langage Java"](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 / ref = sr_1_1? __Mk_ja_JP =% E3% 82% AB % E3% 82% BF% E3% 82% AB% E3% 83% 8A & mots-clés = 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 J'ai appris à propos de% 85% A5% E9% 96% 80 & qid = 1559563427 & s = gateway & sr = 8-1) et j'ai décidé d'écrire en kotlin pendant que j'étais en Java. Tout d'abord, je vais résumer Iterator.
C'est un modèle qui scanne les éléments d'un ensemble tel que List dans l'ordre depuis le début, ce qui signifie «répétiteur» en japonais.
L'interface Agreagate a le rôle d'agrégat qui peut être compté. L'interface n'est pas héritée, mais a pour rôle de forcer la méthode à être implémentée.
Aggregate.java
interface Aggregate {
public abstract Iterator iterator();
}
Aggregate.kt
interface Aggregate {
fun iterator(): Iterator
}
Une interface qui a une méthode de manipulation des éléments car elle joue un rôle dans le comptage des éléments Ici, le mouvement de la méthode suivante est important, et il est nécessaire d'acquérir l'élément et d'avancer l'index pour que l'élément suivant puisse être acquis. De plus, après avoir reçu un examen de cette interface Iterator, il a été dit que le type Object en Java est équivalent à Any? In Kotlin. La différence entre Any et Any? Est de savoir s'il faut ou non autoriser Null, et l'API a été modifiée pour permettre à Null d'autoriser diverses implémentations.
Iterator.java
interface Iterator {
public abstract boolean hasNext();
public abstract Object next();
}
Iterator.kt
interface Iterator {
fun hasNext(): Boolean
fun next(): Any?
}
Créez une classe qui sera récupérée en tant qu'élément. Avec kotlin, vous pouvez l'obtenir avec member.name sans implémenter getter / setter.
Member.java
class Member {
private String name;
public Member(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
Member.kt
class Member(val name: String)
Créez une classe Staff en tant qu'implémentation d'Agrégat et faites de la classe Staff une collection de Members. Implémentez la méthode Iterator définie dans l'interface.
Staff.java
class Staff implements Aggregate{
private Member[] members;
private int last;
public Staff(int maxsize) {
this.members = new Member[maxsize];
}
public Member getMemberAt(int index) {
return members[index];
}
public void appendMember(Member member) {
this.members[last] = member;
last++;
}
public int getLength() {
return last;
}
public Iterator iterator() {
return new StaffIterator(this);
}
}
Staff.kt
class Staff internal constructor(private val maxSize: Int): Aggregate {
private val members: Array<Member?> = arrayOfNulls(maxSize)
private var last: Int = 0
fun getMemberAt(index: Int): Member? = members[index]
fun appendMember(member: Member) {
members[this.last] = member
this.last++
}
fun getLength():Int = this.last
override fun iterator(): Iterator = StaffIterator(this)
}
Créez la classe StaffIterator en tant qu'implémentation d'Iteraltor et implémentez les méthodes afin que Staff puisse être analysé. Dans la méthode suivante, l'élément est acquis et l'index est avancé au suivant, et il a le rôle de i ++ dans la syntaxe For. De plus, j'ai autorisé Null en utilisant la méthode suivante C Any? De l'interface Iterator, mais je n'avais pas l'intention de renvoyer l'objet membre comme null, j'ai donc défini Any, qui est Non-Null, comme valeur de retour.
StaffIterator.java
class StaffIterator implements Iterator{
private Staff staff;
private int index;
public StaffIterator(Staff staff) {
this.staff = staff;
this.index = 0;
}
public boolean hasNext() {
if(index < staff.getLength()) {
return true;
}else {
return false;
}
}
public Object next() {
Member member = staff.getMemberAt(index);
index++;
return member;
}
}
StaffIterator.kt
class StaffIterator(private val staff: Staff): Iterator {
private var index: Int = 0
override fun hasNext(): Boolean = index < staff.getLength()
override fun next(): Any {
val member: Member = staff.getMemberAt(index) as Member
index++
return member
}
}
Il s'agit de la classe Main qui exploite en fait la classe ci-dessus. Le point ici est que la mise en œuvre de Staff n'interfère pas avec la déclaration while.
IteratorSample.java
public class IteratorSample {
public static void main(String[] args) {
Staff staff = new Staff(3);
staff.appendMember(new Member("sato"));
staff.appendMember(new Member("suzuki"));
staff.appendMember(new Member("saito"));
Iterator it = staff.iterator();
while(it.hasNext()) {
Member member = (Member)it.next();
System.out.println(member.getName());
}
}
}
IteratorSample.kt
fun main(args: Array<String>){
val staff = Staff(3).apply {
appendMember(Member("sato"))
appendMember(Member("suzuki"))
appendMember(Member("saito"))
}
val it: Iterator = staff.iterator()
while (it.hasNext()) {
val member: Member = it.next() as Member
println(member.name)
}
}
Résultat d'exécution
sato
suzuki
saito
Changement du tableau de classe de personnel en Vector. À la suite de sa mise en œuvre, j'ai pu confirmer que la gamme d'influence du changement se situait au sein de la classe du personnel et j'ai appris l'importance d'une faible dépendance.
package practice.design_pattern_java;
import java.util.Vector;
interface Aggregate {
public abstract Iterator iterator();
}
interface Iterator {
public abstract boolean hasNext();
public abstract Object next();
}
class Member {
private String name;
public Member(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
class StaffIterator implements Iterator{
private Staff staff;
private int index;
public StaffIterator(Staff staff) {
this.staff = staff;
this.index = 0;
}
public boolean hasNext() {
if(index < staff.getLength()) {
return true;
}else {
return false;
}
}
public Object next() {
Member member = staff.getMemberAt(index);
index++;
return member;
}
}
class Staff implements Aggregate{
private Vector<Member> members = new Vector<Member>();
private int last;
public Member getMemberAt(int index) {
return members.get(index);
}
public void appendMember(Member member) {
this.members.addElement(member);;
last++;
}
public int getLength() {
return last;
}
public Iterator iterator() {
return new StaffIterator(this);
}
}
public class IteratorVectorSample {
public static void main(String[] args) {
Staff staff = new Staff();
staff.appendMember(new Member("sato"));
staff.appendMember(new Member("suzuki"));
staff.appendMember(new Member("saito"));
Iterator it = staff.iterator();
while(it.hasNext()) {
Member member = (Member)it.next();
System.out.println(member.getName());
}
}
}
Il était très facile à lire et à comprendre en se référant à ce qui suit.
Introduction à Kotlin pour les programmeurs Java
Pour Kotlin's Any, je me suis référé à ce qui suit. Là où les programmeurs Java ont tendance à trébucher sur Kotlin
Recommended Posts