الگوهای طراحی راه حل های اثبات شده ای برای مشکلات طراحی نرمافزار هستند. آنها به بهبود کیفیت کد، ارتقای قابلیت استفاده مجدد و افزایش قابلیت نگهداری کمک می کنند. ما از آنها برای صرفهجویی در زمان و تولید کد های با کیفیت، توسعهپذیر و انعطافپذیر استفاده میکنیم. در این مطلب قصد داریم الگوی طراحی State را معرفی کنیم.
الگوی طراحی State یک الگوی رفتاری(behavioral) است که به یک شی اجازه می دهد تا رفتار خود را بر اساس نیاز تغییر دهد. این الگو به جداسازی رفتار یک شی از وضعیت آن کمک می کند و امکانی برای جابجایی بین وضعیت های مختلف به صورت پویا فراهم می کند.
الگوی طراحی State به طور معمول از سه جزء اصلی تشکیل شده است:
در ادامه نمونه ای از پیاده سازی الگوی طراحی State در سی شارپ آورده شده است:
// Define the State interface
public interface IState
{
void Handle();
}
// Define Concrete State classes
public class ConcreteStateA : IState
{
public void Handle()
{
Console.WriteLine("State A is handling the request.");
}
}
public class ConcreteStateB : IState
{
public void Handle()
{
Console.WriteLine("State B is handling the request.");
}
}
// Define the Context class
public class Context
{
private IState state;
public Context(IState state)
{
this.state = state;
}
public void ChangeState(IState state)
{
this.state = state;
}
public void Request()
{
state.Handle();
}
}
// Usage
var context = new Context(new ConcreteStateA());
context.Request(); // Output: "State A is handling the request."
context.ChangeState(new ConcreteStateB());
context.Request(); // Output: "State B is handling the request."
در مثال بالا، رابط State و دو کلاس Concrete State (ConcreteStateA و ConcreteStateB) را تعریف کرده ایم که رابط State را پیاده سازی می کنند. ما همچنین یک کلاس Context داریم که یک نمونه از State را به عنوان وضعیت نگهداری میکند. متد Request در کلاس Context، دستورات مربوط به یک وضعیت خاص را انتخاب میکند. با تغییر نمونه State تعریف شده در Context رفتار متد Request تغییر خواهد کرد.
الگوی طراحی State یک الگوی مفید برای زمانی است که رفتار یک شی باید بر اساس نیاز و بصورت پویا تغییر کند. این ویژگی به کپسوله کردن رفتار یک شی کمک می کند و روشی انعطاف پذیر برای جابجایی بین حالت های مختلف در زمان اجرا فراهم می کند.
برای مطالعه سایر الگو های طراحی، میتوانید از لیست زیر استفاده کنید. همچنین یک مخزن کد در گیت هاب که شامل همهی الگو های طراحی میشود، برای شما قرار گرفته است.
من محمدرضا باباخانی هستم، توسعه دهنده نرم افزار. در اینجا تجربیات، نظرات و پیشنهادات خودم رو درباره تکنولوژی مینویسم. امیدوارم مطالبی که مینویسم بدردتون بخوره.
ثبت دیدگاه