برج پیٹرن کیا ہے؟
برج پیٹرن ایک ساختی ڈیزائن پیٹرن ہے۔ یعنی اس کا بنیادی کام طبقات اور اشیاء کا مکمل ڈھانچہ بنانا ہے۔ برج ایک یا زیادہ کلاسوں کو الگ الگ درجہ بندی میں الگ کر کے اس مسئلے کو حل کرتا ہے - خلاصہ اور نفاذ ۔ ایک درجہ بندی میں فعالیت میں تبدیلی دوسرے میں تبدیلیوں کی ضرورت نہیں ہے۔ سب کچھ واضح نظر آتا ہے، لیکن درحقیقت یہ تعریف بہت وسیع لگتی ہے اور اس اہم سوال کا جواب نہیں دیتی: "برج پیٹرن کیا ہے؟" میرے خیال میں آپ کے لیے عملی طور پر اس کا پتہ لگانا آسان ہوگا۔ آئیے فوری طور پر برج پیٹرن کے لیے ایک بہترین مثال بنائیں۔ ہمارے پاس ایک تجریدی کلاس ہے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 : TriangleGreen
TriangleRed
RectangleBlack
RectangleGreen
RectangleRed
Color
BlackColor
GreenColor
RedColor
-
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
ایک پل ہے جو دو الگ الگ طبقاتی درجہ بندیوں کو آپس میں جوڑتا ہے۔
برج ڈیوائس: تجرید اور نفاذ کیا ہے۔
آئیے کلاس ڈایاگرام پر ایک نظر ڈالتے ہیں جو برج پیٹرن کو بیان کرتا ہے: یہاں آپ دو آزاد ڈھانچے دیکھ سکتے ہیں جن میں ایک دوسرے کی فعالیت کو متاثر کیے بغیر ترمیم کی جا سکتی ہے۔ ہمارے معاملے میں یہ ہے:- خلاصہ - کلاس
Shape
؛ - RefinedAbstraction - کلاسز
Triangle
,Rectangle
; - لاگو کرنے والا - انٹرفیس
Color
؛ - ConcreteImplementor - کلاسز
BlackColor
،GreenColor
اورRedColor
.
Shape
ایک تجرید کی نمائندگی کرتی ہے - مختلف رنگوں میں شکلوں کے رنگنے کو کنٹرول کرنے کا ایک طریقہ کار، جو انٹرفیس پر عمل درآمد کو تفویض کرتا ہے Color
۔ کلاسز حقیقی اشیاء Triangle
ہیں Rectangle
جو کلاس کے ذریعہ پیش کردہ میکانزم کو استعمال کرتی ہیں Shape
۔ BlackColor
، GreenColor
اور RedColor
- نفاذ برانچ میں مخصوص نفاذات۔ انہیں اکثر پلیٹ فارم کہا جاتا ہے۔
برج پیٹرن کہاں استعمال ہوتا ہے؟
اس پیٹرن کو استعمال کرنے کا ایک بہت بڑا فائدہ یہ ہے کہ آپ دوسری برانچ کی منطق کو توڑے بغیر ایک برانچ میں کلاسز کی فعالیت میں تبدیلیاں کر سکتے ہیں۔ یہ نقطہ نظر پروگرام کی کلاسوں کے جوڑے کو کم کرنے میں بھی مدد کرتا ہے۔ پیٹرن استعمال کرنے کی بنیادی شرط یہ ہے کہ "ہدایات پر عمل کریں": انہیں کہیں بھی نہ لگائیں! دراصل، آئیے یہ معلوم کرتے ہیں کہ آپ کو کن صورتوں میں یقینی طور پر برج استعمال کرنے کی ضرورت ہے:-
اگر دو سمتوں (جیومیٹرک شکلیں، رنگ) میں اداروں کی تعداد کو بڑھانا ضروری ہے۔
-
اگر آپ ایک بڑی کلاس کو تقسیم کرنا چاہتے ہیں جو واحد ذمہ داری کے اصول پر پورا نہیں اترتا ہے تو اسے تنگ پروفائل کی فعالیت کے ساتھ چھوٹی کلاسوں میں تقسیم کرنا ہے۔
-
اگر پروگرام کے چلنے کے دوران بعض اداروں کے آپریشن کی منطق میں تبدیلی کرنے کی ممکنہ ضرورت ہو۔
-
اگر ضروری ہو تو، عمل درآمد کو کلاس (لائبریری) کلائنٹس سے چھپائیں۔
پیٹرن کے فوائد اور نقصانات
دوسرے نمونوں کی طرح، پل کے بھی فوائد اور نقصانات ہیں۔ پل کے فوائد:- کوڈ اسکیل ایبلٹی کو بہتر بناتا ہے - آپ پروگرام کے کسی اور حصے میں کچھ ٹوٹنے کے خوف کے بغیر فعالیت شامل کرسکتے ہیں۔
- ذیلی طبقات کی تعداد کو کم کرتا ہے - کام کرتا ہے جب دو سمتوں میں اداروں کی تعداد کو بڑھانا ضروری ہو (مثال کے طور پر، شکلوں کی تعداد اور رنگوں کی تعداد)۔
- خلاصہ اور عمل درآمد کی دو آزاد شاخوں پر الگ الگ کام کرنا ممکن بناتا ہے - یہ دو مختلف ڈویلپرز ایک دوسرے کے کوڈ کی تفصیلات کو تلاش کیے بغیر کر سکتے ہیں۔
- کلاسوں کے جوڑے کو کم کرنا - واحد جگہ جہاں دو کلاسیں منسلک ہیں وہ پل (فیلڈ
Color color
) ہے۔
- مخصوص صورتحال اور مجموعی طور پر منصوبے کی ساخت پر منحصر ہے، پروگرام کی پیداواری صلاحیت پر منفی اثر پڑ سکتا ہے (مثال کے طور پر، اگر مزید اشیاء کو شروع کرنے کی ضرورت ہے)۔
- کلاسوں کے درمیان نیویگیٹ کرنے کی ضرورت کی وجہ سے کوڈ پڑھنے کی اہلیت کو پیچیدہ بناتا ہے۔
GO TO FULL VERSION