Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace _14_Composite
- {
- /*
- * Управление солдатами
- */
- class Program
- {
- static void Main(string[] args)
- {
- IMovableUnit unit;
- var squad = new Squad();
- squad.Add(new SingleUnit());
- squad.Add(new SingleUnit());
- squad.Add(new SingleUnit());
- var squad2 = new Squad();
- squad2.Add(new SingleUnit());
- squad2.Add(new SingleUnit());
- squad2.Add(new SingleUnit());
- var squad3 = new Squad();
- squad3.Add(squad);
- squad3.Add(squad2);
- unit = squad3;
- var getHealth = new GetTotalHealth();
- unit.Accept(getHealth);
- Console.WriteLine(getHealth.GetResult());
- unit.Move();
- }
- }
- interface IMovableUnit
- {
- void Move();
- void Accept(IMovableUnitVisitor visitor);
- }
- interface IMovableUnitVisitor
- {
- void Visit(SingleUnit unit);
- void Visit(Squad squad);
- }
- class GetTotalHealth : IMovableUnitVisitor
- {
- private int _total;
- public int GetResult()
- {
- return _total;
- }
- public void Visit(SingleUnit unit)
- {
- _total = unit.Health;
- }
- public void Visit(Squad squad)
- {
- }
- }
- class SingleUnit : IMovableUnit
- {
- public int Health;
- public void Accept(IMovableUnitVisitor visitor)
- {
- visitor.Visit(this);
- }
- public void Move()
- {
- }
- }
- class Squad : IMovableUnit
- {
- private List<IMovableUnit> _movableUnits = new List<IMovableUnit>();
- public void Accept(IMovableUnitVisitor visitor)
- {
- visitor.Visit(this);
- foreach (var unit in _movableUnits)
- {
- unit.Accept(visitor);
- }
- }
- public void Add(IMovableUnit unit)
- {
- _movableUnits.Add(unit);
- }
- public void Move()
- {
- foreach (var unit in _movableUnits)
- {
- unit.Move();
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement