انواع دیزاین پترن ها در #C (بخش پایانی)

انواع دیزاین پترن ها در #C (بخش پایانی)

انواع دیزاین پترن ها در #C (بخش پایانی)

در بخش پایانی به این 3 مورد آخر می پردازیم:

  • دیزاین پترن Strategy

  • دیزاین پترن Template Method

  • دیزاین پترن Visitor

مطالب پیش نیاز:

 

انواع دیزاین پترن ها در #C (بخش پایانی)

در بخش پایانی به این 3 مورد آخر می پردازیم:

  • دیزاین پترن Strategy

  • دیزاین پترن Template Method

  • دیزاین پترن Visitor

مطالب پیش نیاز:

  • دیزاین پترن Strategy | Strategy Design Pattern – C#

این الگو شامل حذف یک الگوریتم از کلاس میزبان و قرار دادن آن در یک کلاس جداگانه است. همانطور که می دانید، ممکن است استراتژی های متعددی برای یک مشکل مشخص مورد استفاده قرار گیرد. بنابراین، اگر الگوریتم ها در کلاس میزبان وجود داشته باشد، آن را یک کد کثیف با تعداد زیادی از اظهارات شرطی به ارمغان می آورد.

الگوی strategy کاربر را قادر می سازد که از داخل یک گروه از الگوریتم ها یک الگوریتم را برای استفاده انتخاب نماید.

  • نمودار UML و پیاده سازی دیزاین پترن Strategy

strategy

کلاس ها، اینترفیس ها و اشیاء در نمودار کلاس UML بالا به شرح زیر هستند:

Context

یک کلاس که حاوی یک ویژگی است که مرجع یک شیء Strategy را نگه می دارد. این ویژگی در زمان اجرا بر اساس الگوریتم مورد نیاز است.

Strategy

یک رابط است که توسط شی Object برای تماس با الگوریتم تعریف شده توسط ConcreteStrategy استفاده می شود.

ConcreteStrategyA/B

کلاس هایی هستند که رابط کاربری Strategy را اجرا می کنند.


public class Client
{
 public IStrategy Strategy { get; set; }
 
 public void CallAlgorithm()
 {
 Console.WriteLine(Strategy.Algorithm());
 }
}
 
public interface IStrategy
{
 string Algorithm();
}
 
public class ConcreteStrategyA : IStrategy
{
 public string Algorithm()
 {
 return "Concrete Strategy A";
 }
}
 
public class ConcreteStrategyB : IStrategy
{
 public string Algorithm()
 {
 return "Concrete Strategy B";
 }
}

مثال:

strategy design pattern

 

  • دیزاین پترن Template Method| Template Method Design Pattern – C#

این الگوریتم برای تعریف مراحل پایه یک الگوریتم استفاده می شود و اجرای مراحل جداگانه را می توان تغییر داد. این الگو شبیه به الگوی طراحی strategy است. تفاوت اصلی این است که توانایی تغییر بخش های یک الگوریتم را به جای جایگزینی یک الگوریتم کل وجود دارد.

این الگو دارای یک کلاس abstract است.

  •  نمودار UML و پیاده سازی دیزاین پترن Template Method

template method

 

کلاس ها، اینترفیس ها و اشیاء در نمودار کلاس UML بالا به شرح زیر هستند:

AbstractClass

یک کلاس انتزاعی abstract است که شامل Template Method و عملیات انتزاعی برای هر یک از مراحل که ممکن است توسط زیر کلاسها اجرا شود.

ConcreteClassA/B

زیرکلاسهایی که از  AbstractClass ارث میبرند و عملیات کلاس انتزاعی را لغو می کند.


public abstract class AbstractClass
{
 public void TemplateMethod()
 {
 Step1();
 Step2();
 Step3();
 }
 public abstract void Step1();
 
 public abstract void Step2();
 
 public abstract void Step3();
}
public class ConcreteClassA : AbstractClass
{
 public override void Step1()
 {
 Console.WriteLine("Concrete Class A, Step 1");
 }
 
 public override void Step2()
 {
 Console.WriteLine("Concrete Class A, Step 2");
 }
 
 public override void Step3()
 {
 Console.WriteLine("Concrete Class A, Step 3");
 }
}
public class ConcreteClassB : AbstractClass
{
 public override void Step1()
 {
 Console.WriteLine("Concrete Class B, Step 1");
 }
 
 public override void Step2()
 {
 Console.WriteLine("Concrete Class B, Step 2");
 }
 
 public override void Step3()
 {
 Console.WriteLine("Concrete Class B, Step 3");
 }
}

مثال:

method design pattern

 

  • دیزاین پترن Visitor | Visitor Design Pattern – C#

این الگو برای ایجاد و انجام عملیات جدید بر روی مجموعه ای از اشیاء بدون تغییر ساختار یا کلاس شی مورد استفاده قرار می گیرد. این الگو باعث می شود که بدون تغییر ساختار موجود، عملیات جدید را تغییر دهد.

  • نمودار UML و پیاده سازی دیزاین پترن Visitor

visitor

 

کلاس ها، اینترفیس ها و اشیاء در نمودار کلاس UML بالا به شرح زیر هستند:

Client

یک کلاس است که به اشیاء ساختار داده دسترسی دارد و می تواند آنها را به پذیرش بازدید کننده برای انجام عملیات مناسب هدایت کند.

ObjectStructure

کلاس است که تمام عناصری را که می تواند توسط بازدیدکنندگان استفاده شود را نگه می دارد.

Element

یک رابط است که عملیات Accept (پذیرفتن) را مشخص می کند.

ConcreteElementA/B

کلاس هایی هستند که اینترفیس Element را اجرا می کنند و اطلاعات واقعی را نگه می دارند.

Visitor

یک رابط است که عملیات بازدید برای بازدیدکنندگان را مشخص می کند.

ConcreteVisitorA/B

زیرکلاس هایی هستند که رابط کاربری بازدید کننده را اجرا می کنند.



public class ObjectStructure
{
 public List Elements { get; private set; }
 public ObjectStructure()
 {
 Elements = new List();
 }
 public void Accept(Visitor visitor)
 {
 foreach (Element element in Elements)
 {
 element.Accept(visitor);
 }
 }
}
public interface Element
{
 void Accept(Visitor visitor);
}
public class ConcreteElementA : Element
{
 public void Accept(Visitor visitor)
 {
 visitor.Visit(this);
 }
 public string Name { get; set; }
}
public class ConcreteElementB : Element
{
 public void Accept(Visitor visitor)
 {
 visitor.Visit(this);
 }
 public string Title { get; set; }
}
public interface Visitor
{
 void Visit(ConcreteElementA element);
 void Visit(ConcreteElementB element);
}
public class ConcreteVisitorA : Visitor
{
 public void Visit(ConcreteElementA element)
 {
 Console.WriteLine("VisitorA visited ElementA : {0}", element.Name);
 }
 public void Visit(ConcreteElementB element)
 {
 Console.WriteLine("VisitorA visited ElementB : {0}", element.Title);
 }
}
public class ConcreteVisitorB : Visitor
{
 public void Visit(ConcreteElementA element)
 {
 Console.WriteLine("VisitorB visited ElementA : {0}", element.Name);
 }
 public void Visit(ConcreteElementB element)
 {
 Console.WriteLine("VisitorB visited ElementB : {0}", element.Title);
 }
}

مثال:

visitor design pattern

 

 

نظرات یا سوالات خودرا با ما درمیان بگذارید

0912 097 5516 :شماره تماس
0713 625 1757 :شماره تماس