Допустим, я определяю игровой класс, который реализует два разных представления:
interface IPlayerView {
void play();
}
interface IDealerView {
void deal();
}
Вид, который видит игра при игре в игру, и вид, который видит дилер при игре в игру (то есть игрок не может делать действия дилера, а дилер не может делать действия игрока). Определение игры следующее:
class Game : IPlayerView, IDealerView {
void play() { ... }
void deal() { ... }
}
Теперь предположим, что я хочу дать возможность игрокам играть в игру, но не сдавать ее. Моя первоначальная идея заключалась в том, чтобы вместо
public Game GetGame() { ... }
У меня было бы что-то вроде
public IPlayerView GetGame() { ... }
Но после некоторых тестов я понял, что если я позже попробую этот код, он будет работать:
IDealerView dealerView = (IDealerView)GameClass.GetGame();
это работает и позволяет пользователю действовать в качестве дилера.
Я много волнуюсь? Как вы обычно справляетесь с этими шаблонами? Вместо этого я мог бы создать два разных класса, может быть, «основной» класс, класс дилера, который бы действовал как фабрика классов игроков. Таким образом, я мог точно контролировать то, что я хотел бы передать публике. С другой стороны, это все немного сложнее, чем с этим оригинальным дизайном.
Спасибо