2011-09-26 50 views
2

有接口在2個實體上操作 - 如何設計?

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。

+0

爲什麼你的想法,你* *有哪些? – Thomas

+6

題外話:國際海事組織,設計太保守:) –

+1

@Bala R - 哈哈哈哈,讓我的一天:) –

回答

0

這可能是一個GoodCoupleFactory的一部分:CreateGoodCouples(males, females)

1
class GoodCoupleDetectorImpl : GoodCoupleDetector { 
    public Iterable<GoodCouple> findGoodCouples(Iterable<Male> males, Iterable<Female> females) { } 
} 

這樣你就可以使用不同的策略尋找好的夫妻。

0

我會把方法,如XXXXXXXXXXXX和所有其他方法不直接屬於任何MaleFemale一類像MaleFemaleUtilsGoodCoupleUtils

0

是的,它可以是一個班級的方法。我把它叫做MatchMaker和方法FindMatches :)

0

C# Linq Zip

IEnumerable<Male> males = ...; 
IEnumerable<Female> females = ...; 
IEnumerable<GoodCouples> couples = males.Zip(female, (male, female) => new GoodCouple { male = male, female = female }); 
+2

這不是關於把所有的男性和女性拉到GoodCouples。它是關於從兼容的男性和女性創建GoodCouple實例。我認爲,接口中的'likes()'方法必須以某種方式參與。 –