CodeGym /جاوا بلاگ /Random-UR /پل ڈیزائن پیٹرن
John Squirrels
سطح
San Francisco

پل ڈیزائن پیٹرن

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

پل پیٹرن کیا ہے؟

پل پیٹرن ایک ساختی ڈیزائن پیٹرن ہے. دوسرے لفظوں میں، اس کا بنیادی کام طبقات اور اشیاء سے ایک مکمل ڈھانچہ بنانا ہے۔ ایک پل یہ ایک یا زیادہ کلاسوں کو الگ الگ درجہ بندی میں تقسیم کرکے کرتا ہے: تجرید اور نفاذ ۔ ایک درجہ بندی میں فعالیت میں تبدیلی دوسرے میں تبدیلی کی ضرورت نہیں ہے۔ یہ سب ٹھیک اور اچھا ہے، لیکن یہ تعریف بہت وسیع ہے اور اس سب سے اہم سوال کا جواب نہیں دیتی: "پل پیٹرن کیا ہے؟" میرے خیال میں آپ کے لیے اس کے عملی اطلاق کو سمجھنا آسان ہوگا۔ تو فوراً، آئیے پل پیٹرن کے لیے ایک کلاسک منظر نامہ بناتے ہیں۔ ہمارے پاس ایک تجریدی Shapeکلاس ہے، جو ایک عام جیومیٹرک اعداد و شمار کی نمائندگی کرتی ہے:
  • شکل۔جاوا

    public abstract class Shape {
       public abstract void draw();
    }

    جب ہم مثلث اور مستطیل جیسی شکلیں شامل کرنے کا فیصلہ کرتے ہیں، تو ہم انہیں کلاس کا وارث بنائیں گے Shape:

  • Rectangle.java:

    public class Rectangle extends Shape {
       @Override
       public void draw() {
           System.out.println("Drawing rectangle");
       }
    }
  • Triangle.java:

    public class Triangle extends Shape {
       @Override
       public void draw() {
           System.out.println("Drawing triangle");
       }
    }
ہر چیز اس وقت تک آسان نظر آتی ہے جب تک ہم رنگ کا تصور متعارف نہیں کراتے ہیں۔ یعنی، ہر شکل کا اپنا رنگ ہوگا، اور draw()طریقہ کار کی فعالیت اس رنگ پر منحصر ہوگی۔ طریقہ کار کے مختلف نفاذ کے لیے draw()، پھر ہمیں ہر شکل رنگ کے امتزاج کے لیے ایک کلاس بنانے کی ضرورت ہے۔ اگر ہمارے پاس تین رنگ ہیں، تو ہمیں چھ کلاسوں کی ضرورت ہے : TriangleBlack،،،، اور . چھ کلاسیں اتنا بڑا مسئلہ نہیں ہے۔ لیکن! اگر ہمیں ایک نئی شکل یا رنگ شامل کرنے کی ضرورت ہے، تو کلاسوں کی تعداد تیزی سے بڑھتی ہے۔ اس صورتحال سے کیسے نکلا جائے؟ کسی فیلڈ میں رنگ کو ذخیرہ کرنا اور مشروط بیانات کا استعمال کرتے ہوئے تمام اختیارات کو شمار کرنا بہترین حل نہیں ہے۔ ایک اچھا حل یہ ہے کہ رنگ کو الگ انٹرفیس میں منتقل کیا جائے ۔ مکمل ہونے سے جلد ہی کہا: آئیے تین نفاذ کے ساتھ ایک انٹرفیس بنائیں: , and : TriangleGreenTriangleRedRectangleBlackRectangleGreenRectangleRedColorBlackColorGreenColorRedColor
  • Color.java:

    public interface Color {
       void fillColor();
    }
  • BlackColor.java:

    public class BlackColor implements Color {
       @Override
       public void fillColor() {
           System.out.println("Filling in black color");
       }
    }
  • GreenColor.java

    public class GreenColor implements Color {
       @Override
       public void fillColor() {
           System.out.println("Filling in green color");
       }
    }
  • ریڈ کلر۔جاوا

    public class RedColor implements Color {
       @Override
       public void fillColor() {
           System.out.println("Filling in red color");
       }
    }

    اب ہم کلاس Colorمیں ایک فیلڈ شامل کرتے ہیں Shape۔ ہم اس کی قیمت کنسٹرکٹر میں حاصل کریں گے۔

  • Shape.java:

    public abstract class Shape {
       protected Color color;
    
       public Shape(Color color) {
           this.color = color;
       }
    
       public abstract void draw();
    }

    ہم نفاذ colorمیں متغیر کا استعمال کریں گے۔ Shapeاس کا مطلب ہے کہ شکلیں اب انٹرفیس کی فعالیت کو استعمال کرسکتی ہیں Color۔

  • مستطیل.جاوا

    public class Rectangle extends Shape {
    
       public Rectangle(Color color) {
           super(color);
       }
    
       @Override
       public void draw() {
           System.out.println("Drawing rectangle");
           color.fillColor();
       }
    }
ٹا-ڈا! اب ہم مختلف رنگوں اور اشکال کو اشتہار لامحدود بنا سکتے ہیں، اور کلاسوں کی تعداد صرف لکیری طور پر بڑھے گی۔ فیلڈ Color colorایک پل ہے جو دو الگ الگ طبقاتی درجہ بندی کو جوڑتا ہے۔

ایک پل کیسے بنایا جائے: تجرید اور عمل درآمد

آئیے ایک کلاس ڈایاگرام کو دیکھتے ہیں جو پل کے پیٹرن کو ظاہر کرتا ہے: پل ڈیزائن پیٹرن کا تعارف - 2یہاں آپ دو آزاد ڈھانچے دیکھ سکتے ہیں جو ایک دوسرے کی فعالیت کو متاثر کیے بغیر تبدیل کیے جا سکتے ہیں۔ ہمارے معاملے میں:
  • تجرید Shapeکلاس ہے۔
  • RefinedAbstraction ہے Triangleاور Rectangleکلاسز
  • Colorلاگو کرنے والا انٹرفیس ہے۔
  • ConcreteImplementor ہے BlackColor، GreenColorاور RedColorکلاسز۔
کلاس Shapeایک تجریدی ہے - مختلف رنگوں کے ساتھ شکلوں کو بھرنے کا انتظام کرنے کا ایک طریقہ کار، جو Colorانٹرفیس (امپلیمینٹر) کو تفویض کرتا ہے۔ اور کلاسز کنکریٹ کلاسز ہیں جو کلاس کے ذریعہ دستیاب میکانزم کو استعمال کرتی ہیں Triangle۔ ، اور نفاذ کے درجہ بندی میں ٹھوس نفاذ ہیں۔RectangleShapeBlackColorGreenColorRedColor

برج پیٹرن کہاں استعمال کرنا ہے۔

اس پیٹرن کو استعمال کرنے کا ایک بہت بڑا فائدہ یہ ہے کہ آپ دوسرے کی منطق کو توڑے بغیر ایک درجہ بندی میں فنکشنل کلاسز میں تبدیلیاں کر سکتے ہیں۔ اس کے علاوہ، یہ نقطہ نظر کلاسوں کے درمیان جوڑے کو کم کرنے میں مدد کرتا ہے۔ اس پیٹرن کو استعمال کرتے وقت بنیادی ضرورت "ہدایات پر عمل کریں" ہے — ان میں سے کسی کو بھی نظر انداز نہ کریں! اس مقصد کے لیے، آئیے ان حالات کا پتہ لگائیں جب آپ کو برج پیٹرن کو یقینی طور پر استعمال کرنا چاہیے:
  1. اگر آپ کو دو تصورات (جیسے شکلیں اور رنگ) کے امتزاج کی بنیاد پر اداروں کی تعداد کو بڑھانے کی ضرورت ہے۔

  2. اگر آپ ایک بڑے طبقے کو تقسیم کرنا چاہتے ہیں جو واحد ذمہ داری کے اصول پر پورا نہیں اترتا ہے تو چھوٹی کلاسوں میں جس کی فعالیت تنگ ہے۔

  3. اگر پروگرام کے چلنے کے دوران بعض اداروں کی منطق میں تبدیلیاں کرنا ضروری ہوں۔

  4. اگر کلاس یا لائبریری کے مؤکلوں سے نفاذ کو چھپانا ضروری ہے۔

جب آپ اس پیٹرن کو استعمال کرتے ہیں، تو ہمیشہ یاد رکھیں کہ یہ آپ کے کوڈ میں اضافی ہستیوں کا اضافہ کرتا ہے - ہو سکتا ہے اسے کسی ایسے پروجیکٹ میں استعمال کرنا سمجھ میں نہ آئے جہاں صرف ایک شکل اور ایک یا دو ممکنہ رنگ ہوں۔

پیٹرن کے فوائد اور نقصانات

دوسرے پیٹرن کی طرح، ایک پل کے فوائد اور نقصانات دونوں ہیں. پل پیٹرن کے فوائد:
  1. یہ کوڈ کی اسکیل ایبلٹی کو بہتر بناتا ہے - آپ پروگرام کے کسی اور حصے میں کچھ ٹوٹنے کے خوف کے بغیر فعالیت شامل کر سکتے ہیں۔
  2. یہ ذیلی طبقات کی تعداد کو کم کرتا ہے جب اداروں کی تعداد دوسری صورت میں دو تصورات (مثال کے طور پر، شکلیں اور رنگ) کے امتزاج پر مبنی ہوگی۔
  3. یہ دو الگ الگ درجہ بندیوں پر الگ الگ کام کرنا ممکن بناتا ہے — تجرید اور نفاذ۔ دو مختلف ڈویلپرز ایک دوسرے کے کوڈ کی تفصیلات کو تلاش کیے بغیر تبدیلیاں کر سکتے ہیں۔
  4. یہ کلاسوں کے درمیان جوڑے کو کم کرتا ہے - واحد جگہ جہاں دو کلاسیں جوڑے جاتے ہیں وہ پل (یعنی فیلڈ Color color) ہے۔
پل پیٹرن کے نقصانات:
  1. مخصوص صورتحال اور پروجیکٹ کی مجموعی ساخت پر منحصر ہے، یہ پروگرام کی کارکردگی پر منفی اثر ڈال سکتا ہے (مثال کے طور پر، اگر آپ کو مزید اشیاء شروع کرنے کی ضرورت ہے)۔
  2. دو کلاسوں کے درمیان سوئچ کرنے کی ضرورت کی وجہ سے یہ کوڈ کو کم پڑھنے کے قابل بناتا ہے۔

حکمت عملی کے پیٹرن سے فرق

پل پیٹرن اکثر دوسرے ڈیزائن پیٹرن - حکمت عملی کے ساتھ الجھ جاتا ہے۔ وہ دونوں ساخت کا استعمال کرتے ہیں (اگرچہ ہم نے اعداد و شمار اور رنگوں کے ساتھ مثال میں جمع کا استعمال کیا ہے، برج پیٹرن بھی ساخت کا استعمال کر سکتا ہے)، دوسری اشیاء کو کام سونپتے ہیں۔ لیکن ان میں فرق ہے، اور یہ بہت بڑا ہے۔ حکمت عملی کا نمونہ ایک طرز عمل ہے: یہ بالکل مختلف مسائل کو حل کرتا ہے۔ حکمت عملی الگورتھم کو آپس میں تبدیل کرنے کی اجازت دیتی ہے، جبکہ پل مختلف نفاذ کے درمیان انتخاب کرنے کے لیے ایک تجرید کو نفاذ سے الگ کرتا ہے۔ دوسرے الفاظ میں، حکمت عملی کے برعکس، ایک پل کا اطلاق تمام اداروں یا درجہ بندی کے ڈھانچے پر ہوتا ہے۔ پل پیٹرن ایک ڈویلپر کے ہتھیاروں میں ایک اچھا ہتھیار ہو سکتا ہے. اہم چیز ان حالات کی نشاندہی کرنا ہے جہاں اسے استعمال کرنے کے قابل ہے اور یہ پہچاننا ہے کہ جب کوئی دوسرا نمونہ مناسب ہے۔ اگر آپ دوسرے نمونوں سے واقف نہیں ہیں تو درج ذیل مضامین پڑھیں:
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION