الگوی بازدیدکننده Visitor Pattern
نویسنده: علی یگانه مقدم
تاریخ: ۱۳۹۵/۰۱/۲۶ ۰:۳۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
public interface IElement
{
void Accept(IElementVisitor visitor);
} public interface IElementVisitor
{
void Visit(Manager manager);
void Visit(Employee manager);
void Visit(Worker manager);
} public class Manager: IElement
{
public int WorkingHour = 8;
public int Wife = 1;
public int Children = 3;
public int OffDays = 6;
public int OverHours = 12;
public void Accept(IElementVisitor visitor)
{
visitor.Visit(this);
}
} public class Employee: IElement
{
public int WorkingHour = 8;
public int Wife = 1;
public int Children = 3;
public int OffDays = 6;
public int OverHours = 12;
public void Accept(IElementVisitor visitor)
{
visitor.Visit(this);
}
} public class Worker:IElement
{
public int WorkingHour = 8;
public int Wife = 1;
public int Children = 3;
public int OffDays = 6;
public int OverHours = 12;
public void Accept(IElementVisitor visitor)
{
visitor.Visit(this);
}
} class SalaryCalculator:IElementVisitor
{
public void Visit(Manager manager)
{
var salary = manager.WorkingHour*10000;
salary += manager.Wife*25000;
salary += manager.Children*20000;
salary -= manager.OffDays*5000;
Console.WriteLine("Manager's Salary is " + salary);
}
public void Visit(Employee employee)
{
var salary = employee.WorkingHour * 7000;
salary += employee.Wife * 15000;
salary += employee.Children * 10000;
salary -= employee.OffDays * 6000;
Console.WriteLine("Employee's Salary is " + salary);
}
public void Visit(Worker worker)
{
var salary = worker.WorkingHour * 6000;
salary += worker.Wife * 5000;
salary += worker.Children * 2000;
salary -= worker.OffDays * 7000;
Console.WriteLine("Worker's Salary is " + salary);
}
} class WageCalculator:IElementVisitor
{
public void Visit(Manager manager)
{
var wage = manager.OverHours*30000;
Console.WriteLine("Employee's wage is " + wage);
}
public void Visit(Employee employee)
{
var wage = employee.OverHours * 20000;
Console.WriteLine("Employee's wage is " + wage);
}
public void Visit(Worker worker)
{
var wage = worker.OverHours * 15000;
Console.WriteLine("Employee's wage is " + wage);
}
} class FinancialSystem
{
private readonly IList<IElement> _elements;
public FinanceSystem()
{
_elements=new List<IElement>();
}
public void Attach(IElement element)
{
_elements.Add(element);
}
public void Detach(IElement element)
{
_elements.Remove(element);
}
public void Accept(IElementVisitor visitor)
{
foreach (var element in _elements)
{
element.Accept(visitor);
}
}
} IElement manager=new Manager(); IElement employee=new Employee(); IElement worker=new Worker(); var fine=new FinancialSystem(); fine.Attach(manager); fine.Attach(employee); fine.Attach(worker); fine.Accept(new SalaryCalculator()); fine.Accept(new WageCalculator());
Manager's Salary is 135000 Employee's Salary is 65000 Worker's Salary is 17000 Manager's wage is 360000 Employee's wage is 240000 Worker's wage is 180000