디자인 패턴을 kotlin으로 써 보았다 어댑터 편
이번에는 Adapter에 대해 써 보겠습니다.
Adapter란?
벌써 제공되고 있는 것과 필요한 것의 사이의 어긋남을 메우는 것 같은 디자인 패턴으로, Wrapper 패턴이라고도 불린다는 것.
원래의 클래스를 감싸고 필요한 사양에 맞추는 역할의 패턴.
Adapter 패턴의 2 종류의 실장
의 2 종류가 소개되고 있습니다만, 이번은 1번의 클래스로 계승을 이용한 패턴을 실장해 보고 싶습니다.
클래스에서 상속을 사용하는 패턴
Era 클래스
이 클래스는 원래 제공되고 있던 클래스로 합니다.
kotlin에서는 상속하는 경우, class는 java의 final 취급을 위해, open로 해 상속할 필요가 있다고 하는 것으로 class 정의의 전에 open을 지정한다
참고:
htps //w w. 아 t r t. 이. jp / ai t / archi c0s / 1804/24 / 네 ws008. 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
}
Print 인터페이스
여기는 사양으로 필요하며 요구되는 요구 사항을 충족하는 인터페이스입니다.
kolin에서는 Java로 말하는 void를 지정하는 경우 Unit를 사용한다
Print.java
interface Print{
public abstract void printAsReiwa();
public abstract void printAsHeisei();
}
Print.kt
interface Print{
fun printAsReiwa(): Unit
fun printAsHeisei(): Unit
}
PrintEra 클래스
이 클래스는 Adapter가 되어, Era 클래스를 랩 해, 필요한 요건을 채우는 클래스가 됩니다.
포인트는 Era 클래스의 구현을 바꾸지 않고 요구되는 사양을 구현할 수 있는 점입니다.
상속하는 경우 「:Era」와 같이 지정해, 상속처의 생성자를 호출하는 경우는 「:Era(year)」로 호출할 수 있다
PrintEra.java
class PrintEra extends Era implements Print{
public PrintEra(int year) {
super(year);
}
public void printAsHeisei() {
System.out.println("平成" + yearToHeisei() + "年");
}
public void printAsReiwa() {
if(yearToReiwa() == 1) System.out.println("令和元年");
else System.out.println("令和" + yearToReiwa() + "年");
}
}
PrintEra.kt
class PrintEra(private val year: Int) :Era(year), Print{
override fun printAsHeisei(): Unit = println("平成" + yearToHeisei() + "年")
override fun printAsReiwa() {
if (yearToReiwa() == 1) println("令和元年") else println("令和" + yearToReiwa() + "年")
}
}
Main 클래스
상기 클래스를 실제로 동작시키는 Main 클래스입니다.
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()
}
실행 결과
平成31年
令和元年
클래스 다이어그램
소감
참고
아래를 참고로 하겠습니다. 매우 읽기 쉽고 이해하기 쉬웠습니다.
Java 프로그래머를위한 Kotlin 입문
Reference
이 문제에 관하여(디자인 패턴을 kotlin으로 써 보았다 어댑터 편), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Takunawa/items/5d0a8388780a1123394d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)