Чтобы на самом деле сказать что-либо значимое в этом вопросе, мне понадобится гораздо больше информации, об игре и о будущем.
Я могу только догадываться, куда был направлен вопрос. В какой-то момент они, вероятно, спросят: «Что, если ограничение заключалось в том, что бэтсмен не должен весить более 80 кг?)
-то вдоль линий:
void Main()
{
Console.WriteLine("Current team valid: " +
new Team(
new List<Player>{
new Batsmen(),
new Batsmen(),
new Batsmen(),
new Batsmen()
}).IsTeamValid());
}
abstract class Player {}
class Batsmen : Player{}
class Team {
static readonly IList<TeamConstraint> DefaultConstraints
= new List<TeamConstraint>{new BatsmenConstraint()};
IList<TeamConstraint> _constraints;
IList<Player> _players;
public Team(IList<Player> players) : this(players, DefaultConstraints){}
public Team(IList<Player> players, IList<TeamConstraint> constraints){
_constraints = constraints;
_players = players;
}
public bool IsTeamValid(){
return _constraints.All(constraint => constraint.IsValid(_players));
}
}
abstract class TeamConstraint
{
public abstract bool IsValid(IList<Player> players);
}
class BatsmenConstraint : TeamConstraint
{
const int batsmenRequiredDefault = 4;
readonly int _batsmenRequired;
public BatsmenConstraint(int batsmenRequired = batsmenRequiredDefault){
_batsmenRequired = batsmenRequired;
}
public override bool IsValid(IList<Player> players){
return players.OfType<Batsmen>().Count() == _batsmenRequired;
}
}
Как вы можете видеть, ограничения отдельно от класса команды. Таким образом, вы будете следовать принципам SOLID.
Вы можете:
1) добавить новые конфигурации команды динамически
2) создают новые ограничения динамически без изменения существующей системы.
Что касается вашего вопроса; нет «шаблона дизайна крикетной игры». Вы можете использовать несколько разных шаблонов при попытке решить эту проблему, одна из них подходит лучше, чем другие, и т. Д.
Что я в основном сделал здесь, так это то, что я использовал «bridge pattern» для того, чтобы
Разделить абстракцию от ее реализации, чтобы два могут независимо друг от друга.
, говоря о взаимоотношениях между командой & TeamConstraint.
Количество бэтсменов или боулеров или всех раундов, которые команда может иметь, не фиксирована. И это ограничение. – aamadmi
Исправьте меня, если я ошибаюсь, но сначала вы говорите: «У команды может быть ограничение, что у нее может быть только ** определенное количество игроков» типа », а далее« Количество бэтсменов или боулеров или всех закруглений команда может быть ** не установлена **. И это ограничение ». Какой из них действителен? – ekostadinov
Итак, ваш вопрос не совсем понятен. Вы можете даже получить числа во время выполнения в качестве аргументов конструктора Team :: Team(). Например, Team :: Team (int batsmen, int bowlers, int rounders). Затем внутри конструктора Команды выделите с помощью нового количество необходимых аргументов. – Claudio