Работа на 2 лица - как и где оформить? - PullRequest
2 голосов
/ 26 сентября 2011

Есть интерфейсы

interface Male {
  boolean likes(Female female);
}

interface Female {
  boolean likes(Male male);
}

Есть также интерфейс

interface GoodCouple {
  Male getMale();
  Female getFemale();
}

Вам дано 2 комплекта:

Iterable<Male> males = ...;
Iterable<Female> females = ...;

И вас попросили собратьнабор GoodCouple s:

Iterable<GoodCouple> couples = XXXXXXXXXXXX(males, females);

Вопрос в том, как бы вы определили XXXXXXXXXXXX?Дело не в алгоритме, а в архитектуре: что такое XXXXXXXXXXXX?Это какой-то классовый метод?Какое имя вы бы дали этому классу?Каковы обязанности этого класса?

Если это имеет значение, языки являются либо C #, либо Java.

Ответы [ 5 ]

1 голос
/ 26 сентября 2011
class GoodCoupleDetectorImpl : GoodCoupleDetector {
    public Iterable<GoodCouple> findGoodCouples(Iterable<Male> males, Iterable<Female> females) { }
}

Таким образом, вы можете использовать различные стратегии для поиска хороших пар.

0 голосов
/ 26 сентября 2011

C # Linq Zip

IEnumerable<Male> males = ...;
IEnumerable<Female> females = ...;
IEnumerable<GoodCouples> couples = males.Zip(female, (male, female) => new GoodCouple { male = male, female = female });
0 голосов
/ 26 сентября 2011

Да, это может быть метод в классе.Я бы назвал это MatchMaker и метод FindMatches:)

0 голосов
/ 26 сентября 2011

Я бы поместил методы типа XXXXXXXXXXXX и все другие методы, не относящиеся непосредственно к Male или Female, в класс, подобный MaleFemaleUtils или GoodCoupleUtils.

0 голосов
/ 26 сентября 2011

Может быть частью GoodCoupleFactory: CreateGoodCouples(males, females)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...