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 entendu parler de% 85% A5% E9% 96% 80 & qid = 1559563427 & s = gateway & sr = 8-1) et j'ai décidé d'écrire en kotlin en plus de Java. Cette fois, j'écrirai sur Adapter.
Il s'agit d'un modèle de conception qui comble le fossé entre ce qui est déjà fourni et ce qui est nécessaire, et est également appelé modèle Wrapper. Un modèle de rôles qui encapsule la classe d'origine et répond aux spécifications requises.
Cette classe est supposée être la classe fournie à l'origine. Lors de l'héritage dans kotlin, la classe est traitée comme java final, il est donc nécessaire d'ouvrir et d'hériter, alors spécifiez open avant la définition de la classe référence: https://www.atmarkit.co.jp/ait/articles/1804/24/news008.html
Era.java
class Era{
private int year;
public Era(int year) {
this.year = year;
}
public int yearToReiwa() {
return year - 2018;
}
public int yearToHeisei() {
return year - 1988;
}
}
Era.kt
open class Era(private val year: Int){
fun yearToReiwa(): Int = this.year - 2018
fun yearToHeisei(): Int = this.year - 1988
}
Il s'agit d'une interface qui répond aux exigences requises en tant que spécification. Dans kolin, utilisez Unit lors de la spécification de void en Java
Print.java
interface Print{
public abstract void printAsReiwa();
public abstract void printAsHeisei();
}
Print.kt
interface Print{
fun printAsReiwa(): Unit
fun printAsHeisei(): Unit
}
Cette classe devient un adaptateur et encapsule la classe Era pour répondre aux exigences requises. Le fait est que les spécifications requises peuvent être implémentées sans changer l'implémentation de la classe Era. Lors de l'héritage, spécifiez ": Era", et lors de l'appel du constructeur hérité, utilisez ": Era (year)".
PrintEra.java
class PrintEra extends Era implements Print{
public PrintEra(int year) {
super(year);
}
public void printAsHeisei() {
System.out.println("Heisei" + yearToHeisei() + "Année");
}
public void printAsReiwa() {
if(yearToReiwa() == 1) System.out.println("Première année de Reiwa");
else System.out.println("Reiwa" + yearToReiwa() + "Année");
}
}
PrintEra.kt
class PrintEra(private val year: Int) :Era(year), Print{
override fun printAsHeisei(): Unit = println("Heisei" + yearToHeisei() + "Année")
override fun printAsReiwa() {
if (yearToReiwa() == 1) println("Première année de Reiwa") else println("Reiwa" + yearToReiwa() + "Année")
}
}
Il s'agit de la classe Main qui exploite en fait la classe ci-dessus.
AdapterSample.java
public class AdapterSample {
public static void main(String[] args) {
Print p = new PrintEra(2019);
p.printAsHeisei();
p.printAsReiwa();
}
}
AdapterSample.kt
fun main(args: Array<String>){
val p: Print = PrintEra(2019)
p.printAsHeisei()
p.printAsReiwa()
}
Résultat d'exécution
2019
Première année de Reiwa
C'était très facile à lire et à comprendre en se référant à ce qui suit.