import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class PolaDiJdk {
    public static void main(String[] args) throws IOException {
        List<String> namaProduk = new ArrayList<>(List.of("Tas", "Buku", "Pena", "Penghapus"));

        // Strategy (behavioral): algoritma pengurutan dikemas sebagai objek yang bisa dioper
        Comparator<String> panjangLaluAbjad = Comparator.comparingInt(String::length)
                .thenComparing(Comparator.naturalOrder());
        namaProduk.sort(panjangLaluAbjad);
        System.out.println("urut panjang lalu abjad: " + namaProduk);

        // Decorator (structural): pembungkus menambah perilaku di atas pembaca lain
        try (BufferedReader pembaca = new BufferedReader(
                new StringReader("baris pertama\nbaris kedua"))) {
            System.out.println("dibaca: " + pembaca.readLine());
            System.out.println("dibaca: " + pembaca.readLine());
        }
    }
}
