JavaRush /جاوا بلاگ /Random-SD /ڪافي بريڪ #124. بلڊر ڊيزائن جو نمونو. جاوا ۾ ڪيئن سيريلائ...

ڪافي بريڪ #124. بلڊر ڊيزائن جو نمونو. جاوا ۾ ڪيئن سيريلائيزيشن ۽ ڊيسيريلائيزيشن ڪم

گروپ ۾ شايع ٿيل

جاوا ۾ بلڊر ڊيزائن جو نمونو

ماخذ: وچولي هن آرٽيڪل ۾، اسان سکنداسين ته ڪيئن ٺاهجي ۽ ٺاهجي ڪلاس لاءِ شيون ٺاهيون ۽ استعمال ڪندي بلڊر ڊيزائن جو نمونو . ڪافي بريڪ #124.  بلڊر ڊيزائن جو نمونو.  جاوا ۾ ڪيئن سيريلائيزيشن ۽ ڊيسيريلائيزيشن ڪم - 1

اسان کي بلڊر ڊيزائن جي نموني جي ضرورت ڇو آهي؟

بلڊر جو نمونو ٺهيل عوامي جامد ڪلاس استعمال ڪندي شيون ٺاهڻ لاءِ ٺاهيو ويو آهي جنهن ۾ ساڳيون ڊيٽا فيلڊون آهن ٻاهرين طبقي وانگر. بلڊر جو نمونو پيدا ڪيو ويو مسئلن کي حل ڪرڻ لاءِ جيڪي فيڪٽري ۽ خلاصي فيڪٽري ڊيزائن جي نمونن ۾ موجود هئا جڏهن هڪ طبقي اعتراض ۾ ڪيترائي فيلڊ ويلز ۽/يا ڊيٽا شامل آهن. ان کان اڳ جو اسان بلڊر جي نمونن ڏانھن وڃون ، اچو ته ڏسون ته فيڪٽري ۽ خلاصي فيڪٽري جي نمونن سان ڪھڙا مسئلا پيدا ٿين ٿا منظرنامن لاءِ، جتي ڪنھن شئي جون ڪيتريون ئي فيلڊ ويلز آھن:
  1. ڪلائنٽ پروگرام مان فئڪٽري ڪلاس ۾ وڃڻ لاءِ تمام گھڻا دلائل ھجڻ ڪري غلطيون ٿي سگھن ٿيون ڇاڪاڻ ته اڪثر وقت دليلن جو قسم ساڳيو ھوندو آھي ۽ دليلن جي ترتيب کي برقرار رکڻ لاءِ ڪلائنٽ پاسي تي مشڪل آھي.

  2. ڪجھ پيرا ميٽر اختياري ٿي سگھن ٿا، پر فيڪٽري جي نموني ۾ اسان کي مجبور ڪيو وڃي ٿو ته سڀئي پيرا ميٽر موڪلڻ لاء، ۽ اختياري پيٽرولر کي NULL فائلن طور موڪليو وڃي .

  3. جيڪڏهن اعتراض "ڳري" آهي ۽ پيچيده ڊيزائن سان، پوء اهي سڀئي مشڪلاتون فيڪٽري ڪلاس جو حصو بڻجي ويندا آهن، جيڪي اڪثر مونجهاري جي ڪري ٿي.

مٿين مسئلن کي حل ڪري سگهجي ٿو جڏهن اعتراض جو هڪ وڏو تعداد آهي. هن کي ڪرڻ لاء، توهان کي صرف گهربل پيٽرولر مهيا ڪرڻ جي ضرورت آهي، ۽ پوء اختياري پيٽرولن کي سيٽ ڪرڻ لاء مختلف سيٽر طريقا. ياد رهي ته هن طريقي سان مسئلو اهو آهي ته اعتراض جي حالت متضاد رهندي جيستائين سڀئي خاصيتون واضح طور تي مقرر نه ڪيا وڃن.

بلڊر ڊيزائن جو نمونو ڇا آهي؟

بلڊر جو نمونو ڪيترن ئي اختياري پيرا ميٽرن ۽ متضاد رياستن جي مسئلي کي حل ڪري ٿو هڪ طريقي سان ترتيب ڏيڻ جو طريقو مهيا ڪندي قدم ذريعي. اهو هڪ طريقو استعمال ڪري ٿو جيڪو اصل ۾ حتمي اعتراض واپس ڪري ٿو.

جاوا ۾ بلڊر ڊيزائن جو نمونو ڪيئن لاڳو ڪجي؟

جيڪڏهن اسان هيٺ ڏنل قدمن تي عمل ڪريون ٿا، اسان کي حاصل ڪريون ٿا قدم قدم هڪ اعتراض ٺاهڻ ۽ ان کي ٻيهر حاصل ڪرڻ جو:
  1. ٺاھيو static nested ڪلاس بلڊر ڪلاس جي طور تي ، ۽ پوءِ نقل ڪريو سڀني شعبن کي ٻاهرين طبقي مان بلڊر ڪلاس ۾ . اسان کي نالو ڏيڻ جي ڪنوينشن تي عمل ڪرڻو پوندو، تنهنڪري جيڪڏهن طبقي جو نالو Person آهي ، ته پوءِ بلڊر ڪلاس کي PersonBuilder سڏيو وڃي .

  2. بلڊر ڪلاس کي لازمي طور تي پبلڪ ڪنسٽرڪٽر هجڻ گهرجي جنهن ۾ سڀني گهربل فيلڊن سان گڏ پيراميٽر جي طور تي.

  3. بلڊر ڪلاس وٽ اختياري پيرا ميٽر سيٽ ڪرڻ جا طريقا هجڻ گهرجن، ۽ ان کي اختياري فيلڊ سيٽ ڪرڻ کان پوءِ ساڳيو بلڊر اعتراض واپس ڪرڻ گهرجي.

  4. آخري قدم مهيا ڪرڻ آهي هڪ build() طريقو بلڊر ڪلاس ۾ ، جيڪو ڪلائنٽ پروگرام طرفان گهربل اعتراض واپس ڪندو. هن کي ڪرڻ لاءِ اسان کي لازمي آهي هڪ خانگي ڪنسٽرڪٽر بنيادي ڪلاس ۾ بلڊر ڪلاس سان گڏ دليل طور.

مثال:

اچو ته هڪ مثال ڏسون بلڊر ڊيزائن جي نموني کي واضح سمجهڻ لاءِ .
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();
    }
}
مثال بلڊر جو نمونو : java.lang.StringBuilder ۽ java.lang.StringBuffer استعمال ڪيو بلڊر جو نمونو شيون ٺاهڻ لاءِ.

جاوا ۾ ڪيئن سيريلائيزيشن ۽ ڊيسيريلائيزيشن ڪم

ذريعو: وچولي مون انٽرنشپ کانپوءِ هن سال جي جنوري ۾ جاوا ڏانهن رخ ڪيو. ان کان اڳ، مان گهڻو ڪري PHP ۽ ٿورو جاوا اسڪرپٽ ۾ لکيو. مون اڳ ۾ ڪڏهن به سيريلائيزيشن جو سامنا نه ڪيو هو، جيتوڻيڪ سيريلائيزيشن اصل ۾ PHP ۾ موجود آهي. سچ، جاوا ۾ ان کي تمام گهڻو استعمال ڪيو ويندو آهي. اڄ مان توهان کي متعارف ڪرائيندس ته ڪيئن سيريلائيزيشن ۽ ڊيسيريلائيزيشن جاوا ۾ ڪم ڪري ٿي ۽ انهن کي استعمال ڪرڻ جا ڪيترائي طريقا.

سيريلائيزيشن ۽ ڊيسيريلائيزيشن ڇا آهي

سيريلائيزيشن جاوا ورچوئل مشين (JVM) ۾ ٻي جاوا ورچوئل مشين ڏانهن منتقلي لاءِ هڪ ڪلاس مان ڪنهن شئي کي بائيٽ جي تسلسل ۾ تبديل ڪرڻ آهي. جيڪڏهن جاوا ورچوئل مشين بائٽس مان هڪ اعتراض ٻيهر ٺاهي ٿي، ان عمل کي deserialization چئبو آهي.

serialization ۽ deserialization جو مثال

سيريلائيزيشن

اچو ته هڪ ڪلاس ٺاهيو جنهن جي اعتراض کي سيريل ڪيو ويندو:
import java.io.*;

public class Person implements Serializable{

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

public Person(int identity, String nomenclature) {

name = nomenclature;
id = identity;
}
}
پرسن ڪلاس سيريلائيبل کي لاڳو ڪري ٿو ته جيئن ان جو اعتراض سيريلائيز/ڊيسيريلائيز ڪري سگهجي. پرسن ڪلاس ۾ ٻه شعبا آهن: سڃاڻپ ڪندڙ ۽ نالو، جيڪي ڊفالٽ ويل مان تبديل ٿين ٿا جڏهن ڪلاس جو مثال ٺاهيو وڃي ٿو. سيريلائيبل انٽرفيس ۽ پروگرام ۾ استعمال ٿيل ٻيا طبقا 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();
}
}
}
جئين توھان ڄاڻو ٿا، مکيه طريقو سيريلائيزيشن شروع ڪري ٿو ۽ ڪامياب پيغام پرنٽ ڪري ٿو، ٻي صورت ۾ ھڪڙي غلطي پيغام ڇپيل آھي. شين کي ترتيب ڏيڻ لاءِ اسان استعمال ڪندا آهيون ObjectOutputStream ۽ writeObject طريقو .

Deserialization

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();
}
}
}
Deserialization serialization جي پٺڀرائي آهي. بائيٽ جي ترتيب مان هڪ اعتراض کي ٻيهر ٺاهڻ لاء، ObjectInputStream ۽ readObject طريقو استعمال ڪريو . نوٽ ڪريو ته پرسن ڪلاس ۾ فيلڊز تائين پهچ مهيا ڪرڻ لاءِ ، شئي کي ڪاسٽ ڪيو ويو آهي Person data type . هڪ طبقاتي اعتراض جيڪو سيريلائيزيشن انٽرفيس کي لاڳو نٿو ڪري، سيريلائيز نٿو ٿي سگهي. تنهن ڪري، ڪو به طبقو جيڪو هڪ طبقي جو حوالو ڏئي ٿو جيڪو سيريلائيزيشن انٽرفيس کي لاڳو ڪري ٿو پاڻ کي سيريلائيزيشن انٽرفيس کي لاڳو ڪرڻ گهرجي، ٻي صورت ۾ هڪ استثنا اڇلايو ويندو. سيريلائيزيشن پليٽ فارم آزاد آهي، مطلب ته بائيٽ اسٽريم کي سيريل ڪيو پيو وڃي ٻي جاوا ورچوئل مشين ذريعي ترتيب ڏئي سگهجي ٿو. جامد ۽ عارضي شعبا سيريل نه هوندا آهن، تنهن ڪري جيڪڏهن توهان وٽ ڪو فيلڊ آهي جنهن کي توهان سيريل ڪرڻ نٿا چاهيو، ان کي عارضي يا جامد ٺاهيو. جامد فيلڊ جي صورت ۾، ان کي سيريل نه ڪيو ويو آهي ڇاڪاڻ ته جامد فيلڊ هڪ طبقي سان تعلق رکي ٿو ۽ نه هڪ اعتراض. انهي جي ڪري، منتقلي رياست فيلڊ کي سيريل ٿيڻ کان روڪي ٿو. سيريلائيزيشن Hibernate، JPA ۽ RMI ۾ استعمال ڪيو ويندو آهي. Serialization به ترتيب ڏئي سگهجي ٿو. هن کي ڪسٽم سيريلائيزيشن سڏيو ويندو آهي.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION