نمط تصميم الباني
نمط الباني builder pattern هو نمط تصميم مصمم لتوفير حل مرن لمشاكل إنشاء الكائنات البرمجبة المختلفة في برمجة كائنية التوجه. الغرض من نمط تصميم الباني هو فصل الاهتمامات seperate of concerns بناء كائن معقد عن تمثيله. وهي واحدة من أنماط تصميم عصابة الأربعة . نظرة عامةيعد نمط تصميم الباني أحد أنماط تصميم GoF [1] التي تصف كيفية حل مشكلات التصميم المتكررة في البرامج كائنية التوجه. يحل نمط تصميم الباني مشاكل مثل:[2]
إنشاء وتجميع أجزاء كائن معقد مباشرة داخل صنف أمر غير مرن. يلزم الصنف بإنشاء تمثيل معين للكائن المعقد ويجعل ذلك من المستحيل تغيير التمثيل لاحقًا بشكل مستقل عن (دون الحاجة إلى تغيير) الصنف. يصف نمط تصميم الباني كيفية حل مثل هذه المشاكل:
يمكن للصنف (عملية البناء الذاتية) التفويض لكائنات تعريفالغرض من نمط تصميم الباني هو فصل بناء كائن معقد عن تمثيله. من خلال القيام بذلك، يمكن أن تخلق عملية البناء نفسها تمثيلات مختلفة.[1] مزاياتتضمن مزايا نمط الباني ما يلي:[3]
سلبياتتشمل عيوب نمط الباني:[3]
هيكلفي الرسم التخطيطي للصنف في مخطط الصنف أعلاه، لا يقوم الصنف
أمثلةسي شارب/// يمثل منتج مُنشأ بواسطة الباني
public class Car
{
public string Make { get; set; }
public string Model { get; set; }
public int NumDoors { get; set; }
public string Colour { get; set; }
public Car(string make, string model, string colour, int numDoors)
{
Make = make;
Model = model;
Colour = colour;
NumDoors = numDoors;
}
}
/// تجريد الباني
public interface ICarBuilder
{
string Colour { get; set; }
int NumDoors { get; set; }
Car GetResult();
}
/// تنفيد محدد للباني
public class FerrariBuilder : ICarBuilder
{
public string Colour { get; set; }
public int NumDoors { get; set; }
public Car GetResult()
{
return NumDoors == 2 ? new Car("Ferrari", "488 Spider", Colour, NumDoors) : null;
}
}
/// المدير
public class SportsCarBuildDirector
{
private ICarBuilder _builder;
public SportsCarBuildDirector(ICarBuilder builder)
{
_builder = builder;
}
public void Construct()
{
_builder.Colour = "Red";
_builder.NumDoors = 2;
}
}
public class Client
{
public void DoSomethingWithCars()
{
var builder = new FerrariBuilder();
var director = new SportsCarBuildDirector(builder);
director.Construct();
Car myRaceCar = builder.GetResult();
}
}
يقوم المدير بتجميع مثيل سيارة car instance في المثال أعلاه، وتفويض delegating البناء construction إلى كائن باني builder object منفصل تم منحه للمدير من قبل العميل Client. المراجع
روابط خارجية
|