Как связать класс с более чем одним поведением с другим классом? - PullRequest
0 голосов
/ 27 мая 2019

У меня есть несколько объектов, которым необходимо два типа поведения одновременно, когда они связаны с классом игры.Как лучше всего это сделать?Я не вижу здесь ни одного паттерна GoF, чтобы помочь, но, может быть, у меня просто перегружен мозг.

interface Actor {}

class Man implements Actor {}

class Woman implements Actor {}

class Game {
    private Map<Actor> actors;
}

Как включить поведение Player, Referee или LineJudge в этот код?

Пример:

Игра 1, Актер 1 Женщина и судья, Актер 2 Женщина и игрок

Игра 2, Актер 1 Женщина и игрок, Актер 2 Мужчина и игрок

Игра 3, Актер 1, Мужчина и Игрок, Актер 2, Мужчина и Рефери, Актер 3, Женщина и Линия Судья

...

1 Ответ

0 голосов
/ 27 мая 2019

Есть несколько возможных решений.Я предоставлю варианты, которые, я думаю, скорее всего, будут соответствовать вашим требованиям, но есть и другие возможные решения.Что лучше в вашей ситуации, зависит от точной функциональности, которую вам нужно реализовать.

Одна коллекция в Game, два атрибута в Actor

Вы можете определить класс Actor с двумя атрибутами, один изтип Персона, который может быть мужчиной или женщиной и другой тип участника, который может быть игроком, рефери или LineJudge.

classdiag1

Три коллекции в игре

Вместо одного вы можете определить три коллекции Актеров в классе Game, по одной для каждой роли, которую играет актер в игре.Ну, если есть только один Рефери, то это не совсем коллекция.

classdiag2

...