好吧,由於服務器端響應配置不佳,我無法找到有效的方式來編寫我的代碼。
由於我想傳達的例子相當複雜,我會嘗試使用真實生活中的示例來提供幫助。尋找適當的設計模式
因此,我們可以說我負責一項體育獎勵計劃,並且試圖創建一個「頂級運動員網頁」。該頁面將顯示來自三種運動類別的頂級男性和女性運動員;棒球,籃球和足球。扭曲的是,可能會有一個男性冠軍,沒有女性冠軍,反之亦然,或者根本沒有贏家。最重要的是,女性只能是棒球運動員或籃球運動員,而男性既可以是籃球運動員,也可以是足球運動員。沒有棒球與其他任何東西的組合。最後,如果男性和女性都存在,女性必須首先展示。與棒球「Homeruns = 32」相比,所有三個類別都具有不同的屬性,例如足球將具有「tds = 43」屬性。
所以混亂進場服務器響應:
<player>
<baseballList>
<baseball
name="Adam"
sex="male"
HomeRuns="32"
reward="True"/>
</baseballList>
<basketballList>
<basketball
name="John"
sex="male"
Points="322"
reward="False"/>
<basketball
name="Sandra"
sex="female"
Points="332"
reward="True"/>
</basketballList>
<footballList>
<football
name= doug
Touchdowns= 33
sex=male
reward="false"/>
</footballList>
</player>
(如果玩家名足球和籃球比賽,是男是當你將結合2)正如你所看到的響應 正在發回不需要的球員(不問爲什麼),我不得不過濾掉這些球員,以及當球員有多項運動時不會合並數據。 所以對於我的方法,我有一個xml處理程序工廠,它將xml發送到指定的「Players」處理程序。這看起來是這樣的:
public class PlayerHandler implements XmlHandler {
private static PlayerHandler handler = new PlayerHandler();
private PlayerHandler() {
}
public static PlayerHandler getInstance() {
return handler;
}
public void load(String localName, String qName, Attributes attributes) {
if (localName != null && attributes != null) {
if (localName.equalsIgnoreCase("football")||localName.equalsIgnoreCase("baseball")||localName.equalsIgnoreCase("basketball")) {
Player player = new Player();
if (localName.equalsIgnoreCase("football"))
player.category = "football"
player.TouchDowns=attributes.getValue("TouchDowns");
else if (localName.equalsIgnoreCase("baseball"))
player.HomeRuns=arrtibutes.getValue("HomeRun");
player.category = "baseball"
else{
player.category = "basketball";
player.Points=attributes.getValue("Points");}
player.sex=attributes.getValue("sex");
player.name=attributes.getValue("name");
}
playerSorter.addPlayer(player);}}
我創建的對象的一個類文件:
public class Player implements Serializable{
public String category;
public String rewards;
public String TouchDowns;
public String Points;
public String HomeRuns;
public String sex;
public String Name;
}
我做所有我與一個名爲「playerSorter」與addPlayer()方法類排序的那僅填充列表,如果指定的條件得到滿足,那麼我有一個getPlayers()方法調用我的checkForAthleteWithInTwoSports()方法(經過,並認爲如果那裏有兩個籃球和足球運動員多數民衆贊成)不是返回排序列表的女人首先顯示(如果適用)。 getPlayers()方法從我的主頁面調用,然後將其設置爲適配器類。 更好的xml響應會讓這樣的任務更容易,但事實並非如此,我想找到一種更有效的方法來實現這一點。如果有人可以幫助我找到一個很好的設計圖案或任何意見,我會很感激它來解決這一點。(另外,類別已經不僅僅是「本壘打,點,漲幅達陣」只是想簡化多個屬性。)
哇,喜歡它。有時候我最終偏離了更多的OOP類型=(。非常感謝你打入我的虛擬數據並花時間幫助我!對不起,我現在不能投票給你(沒有足夠的聲望) 。 – user1823974 2013-02-15 17:13:44
@ user1823974:完全沒問題!很高興幫助:) – 2013-02-15 17:17:44