JavaRush /جاوا بلاگ /Random-UR /کافی وقفہ نمبر 124۔ بلڈر ڈیزائن پیٹرن. جاوا میں سیریلائزی...

کافی وقفہ نمبر 124۔ بلڈر ڈیزائن پیٹرن. جاوا میں سیریلائزیشن اور ڈی سیریلائزیشن کیسے کام کرتی ہے۔

گروپ میں شائع ہوا۔

جاوا میں بلڈر ڈیزائن پیٹرن

ماخذ: میڈیم اس مضمون میں، ہم سیکھیں گے کہ کس طرح بلڈر ڈیزائن پیٹرن کا استعمال کرتے ہوئے کلاس کے لیے اشیاء کو ڈیزائن اور تخلیق کرنا ہے ۔ کافی وقفہ نمبر 124۔  بلڈر ڈیزائن پیٹرن.  جاوا میں سیریلائزیشن اور ڈی سیریلائزیشن کیسے کام کرتی ہے - 1

ہمیں بلڈر ڈیزائن پیٹرن کی ضرورت کیوں ہے؟

بلڈر پیٹرن کو نیسٹڈ پبلک سٹیٹک کلاس کا استعمال کرتے ہوئے آبجیکٹ بنانے کے لیے ڈیزائن کیا گیا ہے جس میں آؤٹر کلاس جیسی ڈیٹا فیلڈز ہیں۔ بلڈر پیٹرن ان مسائل کو حل کرنے کے لیے بنایا گیا تھا جو فیکٹری اور خلاصہ فیکٹری ڈیزائن پیٹرن میں موجود تھے جب کسی کلاس آبجیکٹ میں بہت سی فیلڈ ویلیوز اور/یا ڈیٹا ہوتا ہے۔ اس سے پہلے کہ ہم بلڈر پیٹرن کی طرف بڑھیں ، آئیے دیکھتے ہیں کہ فیکٹری اور خلاصہ فیکٹری پیٹرن کے ساتھ کیا مسائل پیدا ہوتے ہیں ان منظرناموں کے لیے جہاں کسی چیز کی بہت سی فیلڈ ویلیوز ہوتی ہیں:
  1. کلائنٹ پروگرام سے فیکٹری کلاس میں منتقل کرنے کے لیے بہت زیادہ دلائل کا ہونا غلطیاں پیدا کر سکتا ہے کیونکہ زیادہ تر وقت دلیل کی قسم ایک جیسی ہوتی ہے اور مؤکل کی طرف سے دلائل کی ترتیب کو برقرار رکھنا مشکل ہوتا ہے۔

  2. کچھ پیرامیٹرز اختیاری ہو سکتے ہیں، لیکن فیکٹری پیٹرن میں ہمیں تمام پیرامیٹرز بھیجنے پر مجبور کیا جاتا ہے، اور اختیاری پیرامیٹرز کو NULL فائلوں کے طور پر بھیجا جانا چاہیے ۔

  3. اگر اعتراض "بھاری" ہے اور پیچیدہ ڈیزائن کے ساتھ، تو یہ تمام مشکلات فیکٹری کی کلاسوں کا حصہ بن جائیں گی، جو اکثر الجھن کا باعث بنتی ہیں۔

مندرجہ بالا مسائل کو حل کیا جا سکتا ہے جب اعتراض کے پیرامیٹرز کی ایک بڑی تعداد ہے. ایسا کرنے کے لیے، آپ کو صرف کنسٹرکٹر کو مطلوبہ پیرامیٹرز فراہم کرنے کی ضرورت ہے، اور پھر اختیاری پیرامیٹرز کو سیٹ کرنے کے لیے مختلف سیٹر کے طریقے۔ نوٹ کریں کہ اس طریقہ کار کے ساتھ مسئلہ یہ ہے کہ جب تک تمام صفات واضح طور پر متعین نہ ہو جائیں آبجیکٹ کی حالت متضاد رہے گی۔

بلڈر ڈیزائن پیٹرن کیا ہے؟

بلڈر پیٹرن قدم بہ قدم کسی چیز کو بنانے کا طریقہ فراہم کرکے بہت سارے اختیاری پیرامیٹرز اور متضاد حالتوں کے مسئلے کو حل کرتا ہے۔ یہ ایک ایسا طریقہ استعمال کرتا ہے جو اصل میں حتمی آبجیکٹ کو واپس کرتا ہے۔

جاوا میں بلڈر ڈیزائن پیٹرن کو کیسے نافذ کیا جائے؟

اگر ہم ذیل کے مراحل پر عمل کرتے ہیں، تو ہمیں کسی چیز کو بنانے اور اسے بازیافت کرنے کا مرحلہ وار عمل ملتا ہے:
  1. بلڈر کلاس کے طور پر ایک جامد نیسٹڈ کلاس بنائیں ، اور پھر تمام فیلڈز کو آؤٹر کلاس سے بلڈر کلاس میں کاپی کریں ۔ ہمیں نام دینے کے کنونشن پر عمل کرنا ہوگا، لہذا اگر کلاس کا نام ہے Person ، تو بلڈر کلاس کو PersonBuilder کہا جانا چاہیے ۔

  2. بلڈر کلاس کے پاس ایک پبلک کنسٹرکٹر ہونا چاہیے جس میں تمام مطلوبہ فیلڈز بطور پیرامیٹر ہوں۔

  3. بلڈر کلاس کے پاس اختیاری پیرامیٹرز سیٹ کرنے کے طریقے ہونے چاہئیں، اور اسے اختیاری فیلڈ سیٹ کرنے کے بعد وہی بلڈر آبجیکٹ واپس کرنا چاہیے۔

  4. آخری مرحلہ Builder کلاس میں ایک 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 نے اشیاء بنانے کے لیے بلڈر پیٹرن کا استعمال کیا ۔

جاوا میں سیریلائزیشن اور ڈی سیریلائزیشن کیسے کام کرتی ہے۔

ماخذ: میڈیم میں نے انٹرن شپ کے بعد اس سال جنوری میں جاوا کو تبدیل کیا۔ اس سے پہلے، میں زیادہ تر پی ایچ پی اور تھوڑا سا جاوا اسکرپٹ میں لکھتا تھا۔ میں نے پہلے کبھی سیریلائزیشن کا سامنا نہیں کیا تھا، حالانکہ سیریلائزیشن دراصل پی ایچ پی میں موجود ہے۔ سچ ہے، جاوا میں یہ زیادہ کثرت سے استعمال ہوتا ہے۔ آج میں آپ کو جاوا میں سیریلائزیشن اور ڈی سیریلائزیشن کیسے کام کرتی ہے اور ان کو استعمال کرنے کے کئی طریقے بتاؤں گا۔

سیریلائزیشن اور ڈی سیریلائزیشن کیا ہے؟

سیریلائزیشن ایک کلاس سے کسی چیز کو جاوا ورچوئل مشین (JVM) میں کسی دوسری جاوا ورچوئل مشین میں منتقل کرنے کے لیے بائٹس کی ترتیب میں تبدیل کرنا ہے۔ اگر جاوا ورچوئل مشین بائٹس سے کسی چیز کو دوبارہ بناتی ہے تو اس عمل کو ڈیسیریلائزیشن کہا جاتا ہے۔

سیریلائزیشن اور ڈی سیریلائزیشن کی مثال

سیریلائزیشن

آئیے ایک کلاس بنائیں جس کی آبجیکٹ کو سیریلائز کیا جائے گا:
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 طریقہ استعمال کرتے ہیں ۔

ڈی سیریلائزیشن

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();
}
}
}
ڈی سیریلائزیشن سیریلائزیشن کا الٹ ہے۔ بائٹس کی ترتیب سے کسی آبجیکٹ کو دوبارہ بنانے کے لیے ObjectInputStream اور readObject طریقہ استعمال کریں ۔ نوٹ کریں کہ پرسن کلاس میں فیلڈز تک رسائی فراہم کرنے کے لیے ، آبجیکٹ کو Person ڈیٹا ٹائپ پر کاسٹ کیا جاتا ہے ۔ ایک کلاس آبجیکٹ جو سیریلائزیشن انٹرفیس کو نافذ نہیں کرتا ہے اسے سیریلائز نہیں کیا جاسکتا۔ لہذا، کوئی بھی کلاس جو کسی کلاس کا حوالہ دیتی ہے جو سیریلائزیشن انٹرفیس کو نافذ کرتی ہے اسے خود سیریلائزیشن انٹرفیس کو لاگو کرنا ہوگا، بصورت دیگر ایک استثناء دیا جائے گا۔ سیریلائزیشن پلیٹ فارم سے آزاد ہے، یعنی بائٹ سٹریم کو سیریلائز کیا جا سکتا ہے کسی اور جاوا ورچوئل مشین کے ذریعے ڈی سیریلائز کیا جا سکتا ہے۔ جامد اور عارضی فیلڈز سیریلائز کرنے کے قابل نہیں ہیں، لہذا اگر آپ کے پاس کوئی فیلڈ ہے جسے آپ سیریلائز نہیں کرنا چاہتے ہیں، تو اسے عارضی یا جامد بنائیں۔ جامد فیلڈ کی صورت میں، اسے سیریلائز نہیں کیا جاتا ہے کیونکہ ایک جامد فیلڈ کا تعلق کسی شے سے نہیں بلکہ کلاس سے ہوتا ہے۔ اس کی وجہ سے، منتقلی کی حالت فیلڈ کو سیریلائز ہونے سے روکتی ہے۔ سیریلائزیشن ہائبرنیٹ، جے پی اے اور آر ایم آئی میں استعمال ہوتی ہے۔ سیریلائزیشن بھی اپنی مرضی کے مطابق کیا جا سکتا ہے. اسے حسب ضرورت سیریلائزیشن کہا جاتا ہے۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION