JavaRush /Blog Jawa /Random-JV /Ngopi #124. Pola desain bangunan. Cara Serialisasi lan De...

Ngopi #124. Pola desain bangunan. Cara Serialisasi lan Deserialisasi ing Jawa

Diterbitake ing grup

Pola desain pembangun ing Jawa

Sumber: Sedheng Ing artikel iki, kita bakal sinau carane ngrancang lan nggawe obyek kanggo kelas nggunakake pola desain Builder . Ngopi #124.  Pola desain bangunan.  Cara Serialisasi lan Deserialisasi ing Jawa - 1

Napa kita butuh pola desain Builder?

Pola Builder dirancang kanggo nggawe obyek nggunakake kelas statis publik bersarang sing nduweni kolom data sing padha karo kelas njaba. Pola Builder digawe kanggo ngatasi masalah sing ana ing Pabrik lan pola desain Pabrik Abstrak nalika obyek kelas ngemot akeh nilai lapangan lan / utawa data. Sadurunge nerusake menyang pola Builder , ayo ndeleng persis apa masalah sing muncul karo pola Pabrik lan Pabrik Abstrak kanggo skenario ing ngendi obyek duwe akeh nilai lapangan:
  1. Duwe akeh banget argumen sing kudu dilewati saka program klien menyang kelas Pabrik bisa nyebabake kesalahan amarga biasane jinis argumen padha lan angel njaga urutan argumen ing sisih klien.

  2. Sawetara paramèter bisa uga opsional, nanging ing pola Pabrik kita kepeksa ngirim kabeh paramèter, lan paramèter opsional kudu dikirim minangka file NULL .

  3. Yen obyek "abot" lan desain Komplek, kabeh kangelan iki bakal dadi bagéan saka kelas Pabrik, kang asring ndadékaké kanggo kebingungan.

Masalah ing ndhuwur bisa ditanggulangi nalika obyek duwe akeh parameter. Kanggo nindakake iki, sampeyan mung kudu nyedhiyani konstruktor karo paramèter sing dibutuhake, lan banjur macem-macem cara setter kanggo nyetel paramèter opsional. Elinga yen masalah karo metode iki yaiku kahanan obyek bakal tetep ora konsisten kajaba kabeh atribut wis disetel kanthi jelas.

Apa pola desain Builder?

Pola Builder ngatasi masalah duwe akeh parameter opsional lan negara sing ora konsisten kanthi menehi cara kanggo mbangun obyek kanthi langkah. Iki nggunakake cara sing bener ngasilake obyek pungkasan.

Kepiye carane ngetrapake pola desain Builder ing Jawa?

Yen kita ngetutake langkah-langkah ing ngisor iki, kita entuk proses langkah-langkah kanggo nggawe obyek lan njupuk maneh:
  1. Nggawe kelas nested statis minangka kelas Builder , banjur nyalin kabeh kolom saka kelas njaba menyang kelas Builder . Kita kudu ngetutake konvensi penamaan, dadi yen jeneng kelas Person , banjur kelas Builder kudu diarani PersonBuilder .

  2. Kelas Builder kudu duwe konstruktor umum kanthi kabeh kolom sing dibutuhake minangka paramèter.

  3. Kelas Builder kudu duwe cara kanggo nyetel parameter opsional, lan kudu ngasilake obyek Builder sing padha sawise nyetel lapangan opsional.

  4. Langkah pungkasan punika nyedhiyani mbangun () cara ing kelas Builder , kang bakal bali obyek needed dening program klien. Kanggo nindakake iki, kita kudu duwe konstruktor pribadi ing kelas utama karo kelas Builder minangka argumen.

Tuladha:

Ayo goleki conto kanggo ngerteni kanthi jelas babagan 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();
    }
}
Conto pola Builder : java.lang.StringBuilder lan java.lang.StringBuffer nggunakake pola Builder kanggo mbangun obyek.

Cara Serialisasi lan Deserialisasi ing Jawa

Sumber: Sedheng Aku pindhah menyang Jawa ing wulan Januari taun iki sawise magang. Sadurunge iki, aku biasane nulis ing PHP lan JavaScript sethithik. Aku durung nate nemoni serialisasi sadurunge, sanajan serialisasi pancen ana ing PHP. Pancen, ing Jawa luwih kerep digunakake. Dina iki aku bakal ngenalake sampeyan babagan cara serialisasi lan deserialization ing Jawa lan sawetara cara kanggo nggunakake.

Apa serialization lan deserialization

Serialisasi yaiku transformasi obyek saka kelas menyang urutan byte ing Java Virtual Machine (JVM) kanggo transmisi menyang Java Virtual Machine liyane. Yen Mesin Virtual Jawa nggawe maneh obyek saka bita, proses kasebut diarani deserialization.

Tuladha serialisasi lan deseralisasi

Serialisasi

Ayo nggawe kelas sing obyek bakal serialized:
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 ngleksanakake Serializable supaya obyek bisa serialized / deserialized. Kelas Person wis rong lapangan: pengenal lan jeneng, kang ngganti saka nilai gawan nalika Kayata saka kelas digawe. Antarmuka Serializable lan kelas liyane sing digunakake ing program kasebut diimpor menyang 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();
}
}
}
Sing ngerti, cara utama miwiti serialization lan prints pesen sukses, digunakake pesen kesalahan dicithak. Kanggo serialize obyek kita nggunakake ObjectOutputStream lan cara 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 minangka kebalikan saka serialisasi. Kanggo mbangun maneh obyek saka urutan bita, gunakake ObjectInputStream lan metode readObject . Elinga yen kanggo nyedhiyakake akses menyang lapangan ing kelas Person , obyek kasebut dibuwang menyang jinis data Person . A obyek kelas sing ora ngleksanakake antarmuka serialization ora bisa serialized. Mulane, kelas apa wae sing ngrujuk kelas sing ngetrapake antarmuka serialisasi kudu ngetrapake antarmuka serialisasi, yen ora, pangecualian bakal dibuwang. Serialisasi minangka platform independen, tegese stream byte sing diserialisasi bisa dideserialisasi dening Mesin Virtual Java liyane. Kolom statis lan transien ora bisa serial, dadi yen sampeyan duwe lapangan sing ora pengin serialize, nggawe sauntara utawa statis. Ing cilik saka lapangan statis, iku ora serialized amarga lapangan statis belongs kanggo kelas lan dudu obyek. Amarga iki, negara transisi nyegah lapangan saka serialized. Serialisasi digunakake ing Hibernate, JPA lan RMI. Serialisasi uga bisa disesuaikan. Iki diarani serialisasi khusus.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION