JavaRush /Java Blog /Random-ID /Rehat kopi #124. Pola desain pembangun. Cara Kerja Serial...

Rehat kopi #124. Pola desain pembangun. Cara Kerja Serialisasi dan Deserialisasi di Java

Dipublikasikan di grup Random-ID

Pola desain pembangun di Jawa

Sumber: Medium Pada artikel ini, kita akan mempelajari cara mendesain dan membuat objek untuk kelas menggunakan pola desain Builder . Rehat kopi #124.  Pola desain pembangun.  Cara Kerja Serialisasi dan Deserialisasi di Java - 1

Mengapa kita memerlukan pola desain Builder?

Pola Builder dirancang untuk membuat objek menggunakan kelas statis publik bersarang yang memiliki bidang data yang sama dengan kelas luar. Pola Builder dibuat untuk memecahkan masalah yang ada pada pola desain Pabrik dan Pabrik Abstrak ketika objek kelas berisi banyak nilai bidang dan/atau data. Sebelum kita beralih ke pola Builder , mari kita lihat masalah apa yang sebenarnya muncul dengan pola Pabrik dan Pabrik Abstrak untuk skenario ketika sebuah objek memiliki banyak nilai bidang:
  1. Memiliki terlalu banyak argumen untuk diteruskan dari program klien ke kelas Pabrik dapat menyebabkan kesalahan karena seringkali tipe argumennya sama dan sulit untuk menjaga urutan argumen di sisi klien.

  2. Beberapa parameter mungkin opsional, tetapi dalam pola Pabrik kami dipaksa untuk mengirimkan semua parameter, dan parameter opsional harus dikirim sebagai file NULL .

  3. Jika objeknya “berat” dan dengan desain yang rumit, maka semua kesulitan ini akan menjadi bagian dari kelas Pabrik, yang seringkali menimbulkan kebingungan.

Permasalahan di atas dapat diselesaikan bila suatu objek mempunyai jumlah parameter yang banyak. Untuk melakukan ini, Anda hanya perlu menyediakan konstruktor dengan parameter yang diperlukan, dan kemudian berbagai metode penyetel untuk mengatur parameter opsional. Perhatikan bahwa masalah dengan metode ini adalah keadaan objek akan tetap tidak konsisten kecuali semua atribut diatur dengan jelas.

Apa pola desain Builder?

Pola Builder memecahkan masalah memiliki banyak parameter opsional dan status yang tidak konsisten dengan menyediakan cara untuk membangun objek langkah demi langkah. Ini menggunakan metode yang benar-benar mengembalikan objek akhir.

Bagaimana cara menerapkan pola desain Builder di Java?

Jika kita mengikuti langkah-langkah di bawah ini, kita mendapatkan proses langkah demi langkah dalam membuat objek dan mengambilnya:
  1. Buat kelas bersarang statis sebagai kelas Builder , lalu salin semua bidang dari kelas luar ke kelas Builder . Kita harus mengikuti konvensi penamaan, jadi jika nama kelasnya adalah Person , maka kelas Builder harus dipanggil PersonBuilder .

  2. Kelas Builder harus memiliki konstruktor publik dengan semua bidang yang diperlukan sebagai parameter.

  3. Kelas Builder harus memiliki metode untuk menyetel parameter opsional, dan harus mengembalikan objek Builder yang sama setelah menyetel kolom opsional.

  4. Langkah terakhir adalah menyediakan metode build() pada kelas Builder , yang akan mengembalikan objek yang dibutuhkan oleh program klien. Untuk melakukan ini kita perlu memiliki konstruktor pribadi di kelas utama dengan kelas Builder sebagai argumennya.

Contoh:

Mari kita lihat contoh untuk mendapatkan pemahaman yang jelas tentang pola desain Builder .
public class Employee {

    private String name;
    private String company;
    private boolean hasCar;//optional
    private boolean hasBike;//optional

    private Employee(EmployeeBuilder employeeBuilder) {
        name = employeeBuilder.name;
        company = employeeBuilder.company;
        hasCar = employeeBuilder.hasCar;
        hasBike = employeeBuilder.hasBike;
    }

    public String getName() {
        return name;
    }

    public String getCompany() {
        return company;
    }

    public boolean isHasCar() {
        return hasCar;
    }

    public boolean isHasBike() {
        return hasBike;
    }

    public static class EmployeeBuilder {
        private String name;
        private String company;
        private boolean hasCar;//optional
        private boolean hasBike;//optional

        //constructor for required fields
        public EmployeeBuilder(String name, String company) {
            this.name = name;
            this.company = company;
        }

        //setter methods for optional fields
        public EmployeeBuilder setHasCar(boolean hasCar) {
            this.hasCar = hasCar;
            return this;
        }

        public EmployeeBuilder setHasBike(boolean hasBike) {
            this.hasBike = hasBike;
            return this;
        }

        //Build the Employee object
        public Employee build() {
            return new Employee(this);
        }
    }
}

class TestBuilder {
    public static void main(String[] args) {
        //Building the object of Employee thru the build() method provided in EmployeeBuilder class.
        Employee employee = new Employee.EmployeeBuilder("Vikram", "ABC").setHasBike(false).setHasBike(true).build();
    }
}
Contoh pola Builder : java.lang.StringBuilder dan java.lang.StringBuffer menggunakan pola Builder untuk membuat objek.

Cara Kerja Serialisasi dan Deserialisasi di Java

Sumber: Medium Saya beralih ke Java pada bulan Januari tahun ini setelah magang. Sebelumnya, saya kebanyakan menulis dalam PHP dan sedikit JavaScript. Saya belum pernah menemukan serialisasi sebelumnya, meskipun serialisasi sebenarnya ada di PHP. Benar, di Jawa ini lebih sering digunakan. Hari ini saya akan memperkenalkan Anda tentang cara kerja serialisasi dan deserialisasi di Java dan beberapa cara menggunakannya.

Apa itu serialisasi dan deserialisasi

Serialisasi adalah transformasi objek dari kelas menjadi urutan byte di Java Virtual Machine (JVM) untuk transmisi ke Java Virtual Machine lain. Jika Mesin Virtual Java membuat ulang objek dari byte, prosesnya disebut deserialisasi.

Contoh serialisasi dan deserialisasi

Serialisasi

Mari kita buat kelas yang objeknya akan diserialkan:
import java.io.*;

public class Person implements Serializable{

int id = 0;
String name = "empty";

public Person(int identity, String nomenclature) {

name = nomenclature;
id = identity;
}
}
Kelas Person mengimplementasikan Serializable sehingga objeknya dapat diserialkan/deserialisasi. Kelas Person memiliki dua bidang: pengidentifikasi dan nama, yang berubah dari nilai default ketika sebuah instance kelas dibuat. Antarmuka Serializable dan kelas lain yang digunakan dalam program ini diimpor ke paket Java.io.
public static void main(String[] args) throws FileNotFoundException, IOException {

String filename = "filename here";
Person person = new Person(1, "John");

// serialization
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(filename));

try {

out.writeObject(person);
System.out.println("Success");
} catch(Exception e) {

System.out.println("Unsuccessful");
} finally {

if(out != null) {

out.close();
}
}
}
Seperti yang Anda ketahui, metode utama memulai serialisasi dan mencetak pesan sukses, jika tidak, pesan kesalahan akan dicetak. Untuk membuat serial objek kita menggunakan ObjectOutputStream dan metode writeObject .

Deserialisasi

public static void main(String[] args) throws FileNotFoundException, IOException {

String filename = "filename here";
Person person = new Person(1, "John");

// Deserialization
ObjectInputStream in = new ObjectInputStream(new FileInputStream(filename));

try {

Person personObj = (Person)in.readObject();
System.out.println("Person Id is " +personObj.id + " while name is " + personObj.name);
} catch (Exception e) {

e.printStackTrace();
} finally {

if(in != null) {

in.close();
}
}
}
Deserialisasi adalah kebalikan dari serialisasi. Untuk merekonstruksi objek dari urutan byte, gunakan ObjectInputStream dan metode readObject . Perhatikan bahwa untuk menyediakan akses ke bidang di kelas Person , objek dilemparkan ke tipe data Person . Objek kelas yang tidak mengimplementasikan antarmuka serialisasi tidak dapat diserialkan. Oleh karena itu, setiap kelas yang mereferensikan kelas yang mengimplementasikan antarmuka serialisasi harus mengimplementasikan antarmuka serialisasi itu sendiri, jika tidak, pengecualian akan dilempar. Serialisasi tidak bergantung pada platform, artinya aliran byte yang sedang diserialisasi dapat dideserialisasi oleh Mesin Virtual Java lainnya. Bidang statis dan sementara tidak dapat diserialkan, jadi jika Anda memiliki bidang yang tidak ingin diserialkan, buatlah bidang tersebut sementara atau statis. Dalam kasus bidang statis, bidang tersebut tidak berseri karena bidang statis milik kelas dan bukan objek. Oleh karena itu, keadaan transisi mencegah bidang tersebut diserialkan. Serialisasi digunakan di Hibernate, JPA dan RMI. Serialisasi juga dapat disesuaikan. Ini disebut serialisasi khusus.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION