JavaRush /Java Blogu /Random-AZ /Kofe fasiləsi №124. İnşaatçı dizayn nümunəsi. Java-da Ser...

Kofe fasiləsi №124. İnşaatçı dizayn nümunəsi. Java-da Seriyalaşdırma və Seriyalaşdırma Necə İşləyir

Qrupda dərc edilmişdir

Java-da inşaatçı dizayn nümunəsi

Mənbə: Orta Bu məqalədə biz Builder dizayn nümunəsindən istifadə edərək sinif üçün obyektlərin necə dizayn ediləcəyini və yaradılmasını öyrənəcəyik . Kofe fasiləsi №124.  İnşaatçı dizayn nümunəsi.  Java-da Serializasiya və Deserializasiya necə işləyir - 1

İnşaatçı dizayn nümunəsinə nə üçün ehtiyacımız var?

Qurucu nümunəsi xarici siniflə eyni məlumat sahələrinə malik olan iç içə ictimai statik sinifdən istifadə edərək obyektlər yaratmaq üçün nəzərdə tutulmuşdur. Qurucu nümunəsi, bir sinif obyekti bir çox sahə dəyəri və/və ya məlumatı ehtiva edən zaman FabrikaAbstrakt Fabrika dizayn nümunələrində mövcud olan problemləri həll etmək üçün yaradılmışdır . Qurucu nümunəsinə keçməzdən əvvəl obyektin çoxlu sahə dəyərlərinə malik olduğu ssenarilər üçün FabrikaAbstrakt Fabrika nümunələrində hansı problemlərin yarandığına baxaq :
  1. Müştəri proqramından Fabrika sinfinə keçmək üçün çoxlu arqumentlərin olması səhvlərə səbəb ola bilər, çünki çox vaxt arqument növü eynidir və müştəri tərəfində arqumentlərin sırasını saxlamaq çətindir.

  2. Bəzi parametrlər isteğe bağlı ola bilər, lakin Zavod modelində biz bütün parametrləri göndərməyə məcbur oluruq və isteğe bağlı parametrlər NULL faylları kimi göndərilməlidir .

  3. Obyekt "ağır" və mürəkkəb dizayna malikdirsə, bütün bu çətinliklər tez-tez çaşqınlığa səbəb olan Zavod siniflərinin bir hissəsi olacaq.

Yuxarıdakı problemlər obyektin çoxlu sayda parametrləri olduqda həll edilə bilər. Bunu etmək üçün sadəcə olaraq konstruktoru lazımi parametrlərlə təmin etməlisiniz, sonra isə isteğe bağlı parametrləri təyin etmək üçün müxtəlif təyinetmə üsulları. Qeyd edək ki, bu metodla bağlı problem, bütün atributlar dəqiq təyin edilməyincə, obyektin vəziyyətinin uyğunsuz qalmasıdır .

Builder dizayn nümunəsi nədir?

Qurucu nümunəsi, bir obyekti addım-addım qurmaq üçün bir yol təqdim etməklə çoxlu isteğe bağlı parametrlərə və uyğunsuz vəziyyətlərə malik olmaq problemini həll edir. Bu, əslində son obyekti qaytaran bir metoddan istifadə edir.

Java-da Builder dizayn nümunəsini necə tətbiq etmək olar?

Aşağıdakı addımları yerinə yetirsək, bir obyekt yaratmaq və onu əldə etmək üçün addım-addım prosesi əldə edirik:
  1. Builder sinfi kimi statik yuvalanmış sinif yaradın sonra bütün sahələri xarici sinifdən Builder sinfinə köçürün . Biz adlandırma konvensiyasına əməl etməliyik, ona görə də sinif adı Şəxsiyyətdirsə , Qurucu sinfi PersonBuilder adlandırılmalıdır .

  2. Builder sinfinin parametrlər kimi bütün tələb olunan sahələri olan ictimai konstruktoru olmalıdır.

  3. Builder sinfi isteğe bağlı parametrləri təyin etmək üçün üsullara malik olmalıdır və isteğe bağlı sahəni təyin etdikdən sonra eyni Builder obyektini qaytarmalıdır .

  4. Son addım Builder sinfində müştəri proqramı üçün lazım olan obyekti qaytaracaq build() metodunu təmin etməkdir . Bunu etmək üçün əsas sinifdə arqument olaraq Builder sinfi ilə şəxsi konstruktora sahib olmalıyıq .

Misal:

Builder dizayn nümunəsini aydın şəkildə başa düşmək üçün bir nümunəyə baxaq .
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();
    }
}
Misal Builder nümunəsi : java.lang.StringBuilderjava.lang.StringBuffer obyektləri qurmaq üçün Builder modelindən istifadə etdi .

Java-da Seriyalaşdırma və Seriyalaşdırma Necə İşləyir

Mənbə: Orta Mən bu ilin yanvar ayında təcrübə keçdikdən sonra Java-ya keçdim. Bundan əvvəl mən əsasən PHP və bir az JavaScript-də yazırdım. Daha əvvəl seriallaşdırma ilə qarşılaşmamışam, baxmayaraq ki, seriallaşdırma PHP-də mövcuddur. Düzdür, Java-da daha tez-tez istifadə olunur. Bu gün sizi Java-da seriallaşdırma və sıradan çıxarma işi və onlardan istifadə etməyin bir neçə yolu ilə tanış edəcəyəm.

Serializasiya və serializasiya nədir

Serializasiya, başqa Java Virtual Maşınına ötürülmək üçün obyektin sinifdən Java Virtual Maşınında (JVM) bayt ardıcıllığına çevrilməsidir. Java Virtual Maşını baytlardan obyekti yenidən yaradırsa, bu proses sıradan çıxarma adlanır.

Serializasiya və sıradan çıxarma nümunəsi

Serializasiya

Gəlin obyekti seriallaşdırılacaq bir sinif yaradaq:
import java.io.*;

public class Person implements Serializable{

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

public Person(int identity, String nomenclature) {

name = nomenclature;
id = identity;
}
}
Person sinfi Serializable-ı tətbiq edir ki, onun obyekti seriallaşdırıla/seriallaşdırıla bilsin. Person sinfinin iki sahəsi var: identifikator və ad, sinif nümunəsi yaradıldıqda standart dəyərdən dəyişir. Proqramda istifadə olunan Serializable interfeysi və digər siniflər Java.io paketinə idxal edilib .
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();
}
}
}
Bildiyiniz kimi, əsas üsul seriallaşdırmaya başlayır və müvəffəqiyyət mesajı çap edir, əks halda səhv mesajı çap olunur. Obyektləri seriallaşdırmaq üçün biz ObjectOutputStreamwriteObject metodundan istifadə edirik .

Deserializasiya

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();
}
}
}
Deserializasiya serializasiyanın əksidir. Obyekti bayt ardıcıllığından yenidən qurmaq üçün ObjectInputStreamreadObject metodundan istifadə edin . Qeyd edək ki, Person sinifindəki sahələrə girişi təmin etmək üçün obyekt Şəxsiyyət məlumat növünə ötürülür . Serializasiya interfeysini həyata keçirməyən sinif obyekti seriallaşdırıla bilməz. Buna görə də, seriallaşdırma interfeysini həyata keçirən sinfə istinad edən hər hansı bir sinif seriallaşdırma interfeysini özü həyata keçirməlidir, əks halda istisna atılacaq. Serializasiya platformadan müstəqildir, yəni seriallaşdırılan bayt axını başqa Java Virtual Maşın tərəfindən seriyadan çıxarıla bilər. Statik və keçici sahələr seriallaşdırıla bilməz, ona görə də seriallaşdırmaq istəmədiyiniz sahəniz varsa, onu müvəqqəti və ya statik edin. Statik sahə olduğu halda, o, seriallaşdırılmır, çünki statik sahə obyektə deyil, sinifə aiddir. Buna görə keçid vəziyyəti sahənin seriallaşdırılmasının qarşısını alır. Serializasiya Hibernate, JPA və RMI-də istifadə olunur. Serializasiya da fərdiləşdirilə bilər. Buna xüsusi serializasiya deyilir.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION