JavaRush /Blog Java /Random-MS /Coffee break #124. Corak reka bentuk pembina. Cara Pensir...

Coffee break #124. Corak reka bentuk pembina. Cara Pensirilan dan Penyahserikatan Berfungsi di Jawa

Diterbitkan dalam kumpulan

Corak reka bentuk pembina di Jawa

Sumber: Sederhana Dalam artikel ini, kita akan belajar cara mereka bentuk dan mencipta objek untuk kelas menggunakan corak reka bentuk Builder . Coffee break #124.  Corak reka bentuk pembina.  Bagaimana Pensirilan dan Penyahserikatan Berfungsi di Jawa - 1

Mengapa kita memerlukan corak reka bentuk Builder?

Corak Builder direka bentuk untuk mencipta objek menggunakan kelas statik awam bersarang yang mempunyai medan data yang sama seperti kelas luar. Corak Builder dicipta untuk menyelesaikan masalah yang terdapat dalam corak reka bentuk Kilang dan Kilang Abstrak apabila objek kelas mengandungi banyak nilai medan dan/atau data. Sebelum kita beralih ke corak Builder , mari kita lihat dengan tepat masalah yang timbul dengan corak Kilang dan Kilang Abstrak untuk senario di mana objek mempunyai banyak nilai medan:
  1. Mempunyai terlalu banyak hujah untuk dihantar dari program klien ke kelas Kilang boleh menyebabkan ralat kerana kebanyakan masa jenis hujah adalah sama dan sukar untuk mengekalkan susunan hujah pada sisi klien.

  2. Sesetengah parameter mungkin pilihan, tetapi dalam corak Kilang kami terpaksa menghantar semua parameter, dan parameter pilihan mesti dihantar sebagai fail NULL .

  3. Jika objek itu "berat" dan dengan reka bentuk yang kompleks, maka semua kesukaran ini akan menjadi sebahagian daripada kelas Kilang, yang sering membawa kepada kekeliruan.

Masalah di atas boleh diselesaikan apabila objek mempunyai sejumlah besar parameter. Untuk melakukan ini, anda hanya perlu menyediakan pembina dengan parameter yang diperlukan, dan kemudian pelbagai kaedah penetap untuk menetapkan parameter pilihan. Ambil perhatian bahawa masalah dengan kaedah ini ialah keadaan objek akan kekal tidak konsisten melainkan semua atribut ditetapkan dengan jelas.

Apakah corak reka bentuk Pembina?

Corak Builder menyelesaikan masalah mempunyai banyak parameter pilihan dan keadaan tidak konsisten dengan menyediakan cara untuk membina objek langkah demi langkah. Ini menggunakan kaedah yang sebenarnya mengembalikan objek akhir.

Bagaimana untuk melaksanakan corak reka bentuk Builder di Java?

Jika kita mengikuti langkah-langkah di bawah, kita mendapat proses langkah demi langkah untuk mencipta objek dan mendapatkannya semula:
  1. Cipta kelas bersarang statik sebagai kelas Builder , dan kemudian salin semua medan dari kelas luar ke kelas Builder . Kita perlu mengikut konvensyen penamaan, jadi jika nama kelas ialah Person , maka kelas Builder hendaklah dipanggil PersonBuilder .

  2. Kelas Builder mesti mempunyai pembina awam dengan semua medan yang diperlukan sebagai parameter.

  3. Kelas Builder mesti mempunyai kaedah untuk menetapkan parameter pilihan, dan ia mesti mengembalikan objek Builder yang sama selepas menetapkan medan pilihan.

  4. Langkah terakhir ialah menyediakan kaedah build() dalam kelas Builder , yang akan mengembalikan objek yang diperlukan oleh program klien. Untuk melakukan ini, kita perlu mempunyai pembina persendirian dalam kelas utama dengan kelas Pembina sebagai hujah.

Contoh:

Mari lihat contoh untuk mendapatkan pemahaman yang jelas tentang corak reka bentuk 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 Corak Builder : java.lang.StringBuilder dan java.lang.StringBuffer menggunakan corak Builder untuk membina objek.

Cara Pensirilan dan Penyahserikatan Berfungsi di Jawa

Sumber: Sederhana Saya bertukar ke Java pada Januari tahun ini selepas latihan. Sebelum ini, saya kebanyakannya menulis dalam PHP dan sedikit JavaScript. Saya tidak pernah menemui siri sebelum ini, walaupun siri sebenarnya wujud dalam PHP. Benar, di Jawa ia digunakan lebih kerap. Hari ini saya akan memperkenalkan anda kepada cara pensirilan dan penyahserikatan berfungsi di Java dan beberapa cara untuk menggunakannya.

Apa itu serialisasi dan deserialisasi

Serialisasi ialah transformasi objek daripada kelas kepada jujukan bait dalam Java Virtual Machine (JVM) untuk penghantaran ke Java Virtual Machine yang lain. Jika Mesin Maya Java mencipta semula objek daripada bait, proses itu dipanggil penyahserialisasian.

Contoh siri dan penyahserikatan

Serialisasi

Mari buat kelas yang objeknya akan bersiri:
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 melaksanakan Serializable supaya objeknya boleh bersiri/deserialisasi. Kelas Orang mempunyai dua medan: pengecam dan nama, yang berubah daripada nilai lalai apabila contoh kelas dibuat. Antara muka Serializable dan kelas lain yang digunakan dalam program ini telah diimport ke dalam pakej 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, kaedah utama memulakan siri dan mencetak mesej kejayaan, jika tidak mesej ralat dicetak. Untuk menyerikan objek kami menggunakan ObjectOutputStream dan kaedah writeObject .

Penyahserialisasian

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();
}
}
}
Penyahserikatan ialah kebalikan daripada pensirilan. Untuk membina semula objek daripada jujukan bait, gunakan ObjectInputStream dan kaedah readObject . Ambil perhatian bahawa untuk menyediakan akses kepada medan dalam kelas Orang , objek itu dihantar ke jenis data Orang . Objek kelas yang tidak melaksanakan antara muka bersiri tidak boleh bersiri. Oleh itu, mana-mana kelas yang merujuk kelas yang melaksanakan antara muka bersiri mesti melaksanakan antara muka bersiri itu sendiri, jika tidak pengecualian akan dibuang. Pensirian adalah platform bebas, bermakna aliran bait yang disiri boleh dinyahsiri oleh Mesin Maya Java yang lain. Medan statik dan sementara tidak boleh bersiri, jadi jika anda mempunyai medan yang anda tidak mahu bersiri, jadikannya sementara atau statik. Dalam kes medan statik, ia tidak bersiri kerana medan statik tergolong dalam kelas dan bukan objek. Oleh sebab itu, keadaan peralihan menghalang medan daripada bersiri. Serialisasi digunakan dalam Hibernate, JPA dan RMI. Serialisasi juga boleh disesuaikan. Ini dipanggil siri tersuai.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION