شرح Builder Design Pattern بالتفصيل مع مثال توضيحي ومعرفة العيوب والمميزات
شرح Builder Design Pattern بالتفصيل مع مثال توضيحي ومعرفة العيوب والمميزات يعد نمط البناء (Builder Design Pattern) أحد أهم أنماط التصميم في البرمجة الشيئية (OOP). يتم استخدامها بشكل أساسي لتبسيط إنشاء كائنات معقدة تحتوي على العديد من الخصائص، وتقسيم عملية الإنشاء إلى خطوات صغيرة. في هذه المقالة سنشرح مفهوم Constructor Pattern بالتفصيل مع كود جافا التوضيحي. ونقارن أيضًا بين تنفيذ عملية الشراء باستخدام Pattern Builder والتنفيذ بدونها، مع إبراز الفرق بين الطريقتين.
ما هي الـBuilder Pattern
نمط البناء هو نمط تصميمي يهدف إلى فصل عملية بناء الكائنات المعقدة عن تمثيلها. هذا يعني أنه يمكننا استخدام نفس عملية البناء لإنشاء تمثيلات مختلفة لنفس الكائن. يكون هذا النمط مفيدًا عندما يحتوي الكائن على عدد كبير من الخصائص التي قد تكون اختيارية أو معقدة. لنفترض أنك تريد إنشاء كائن أمر يمثل عملية شراء ويحتوي على عدد من الخصائص مثل اسم العنصر والكمية والسعر والخصم وعنوان الشحن. إذا كانت كل هذه الخصائص اختيارية أو قابلة للتغيير، فقد يصبح إنشاء هذا الكائن باستخدام المُنشئ أمرًا معقدًا وصعب القراءة.
كود بدون Builder Pattern
public class Order {
private String itemName;
private int quantity;
private double price;
private double discount;
private String deliveryAddress;
public Order(String itemName, int quantity, double price, double discount, String deliveryAddress) {
this.itemName = itemName;
this.quantity = quantity;
this.price = price;
this.discount = discount;
this.deliveryAddress = deliveryAddress;
}
// Getters and toString method
}
استخدام الكود
Order order = new Order("Laptop", 2, 1500.00, 10.0, "123 Street Name");
System.out.println(order);
كود مع استخدام Builder Pattern
public class Order {
private String itemName;
private int quantity;
private double price;
private double discount;
private String deliveryAddress;
private Order(Builder builder) {
this.itemName = builder.itemName;
this.quantity = builder.quantity;
this.price = builder.price;
this.discount = builder.discount;
this.deliveryAddress = builder.deliveryAddress;
}
public static class Builder {
private String itemName;
private int quantity;
private double price;
private double discount;
private String deliveryAddress;
public Builder setItemName(String itemName) {
this.itemName = itemName;
return this;
}
public Builder setQuantity(int quantity) {
this.quantity = quantity;
return this;
}
public Builder setPrice(double price) {
this.price = price;
return this;
}
public Builder setDiscount(double discount) {
this.discount = discount;
return this;
}
public Builder setDeliveryAddress(String deliveryAddress) {
this.deliveryAddress = deliveryAddress;
return this;
}
public Order build() {
return new Order(this);
}
}
// Getters and toString method
}
// استخدام الكود
Order order = new Order.Builder()
.setItemName("Laptop")
.setQuantity(2)
.setPrice(1500.00)
.setDiscount(10.0)
.setDeliveryAddress("123 Street Name")
.build();
System.out.println(order);
الفرق بين الطريقتين
الوضوح وسهولة القراءة: استخدام نمط Builder يجعل التعليمات البرمجية أكثر وضوحًا وأسهل في القراءة لأنه يمكنك رؤية كل وظيفة محددة بشكل منفصل. وهذا مفيد بشكل خاص عندما يكون هناك عدد كبير من الخصائص. قابلية التوسع: باستخدام نمط المنشئ، يمكنك بسهولة إضافة ميزات جديدة دون الحاجة إلى تغيير جميع المنشئات، مما يجعل التعليمات البرمجية الخاصة بك أكثر قابلية للتوسع. تجنب الأخطاء: عند استخدام المنشئات التقليدية مع العديد من المعلمات، يصبح من السهل ارتكاب الأخطاء في ترتيب هذه المعلمات. يساعد منشئ النماذج على تقليل هذه الأخطاء. يعد نمط Builder نمطًا تصميميًا قويًا يساعد على تبسيط عملية إنشاء كائنات معقدة ويجعل التعليمات البرمجية أكثر وضوحًا وأكثر قابلية للتوسعة. بفضل هذا النموذج، يمكن تجنب العديد من الأخطاء ويمكن أن تكون بنية التعليمات البرمجية أفضل بكثير. سواء كنت تعمل على مشروع صغير أو نظام كبير، فإن استخدام Builder Patterns يمكن أن يحدث تأثيرًا
تأثير إيجابي كبير على جودة وكفاءة التعليمات البرمجية الخاصة بك. الخلاصه :
يتم استخدام Builder Pattern عندما يكون لدينا class معقد في مدخلاته وقابل للزيادة .