優(yōu)化工具箱中國(guó)優(yōu)化網(wǎng)
背景:
游戲服務(wù)器中,多態(tài)可以說體現(xiàn)的淋漓盡致。
如:
1.開啟條件。有的系統(tǒng)是根據(jù)玩家等級(jí),有的是根據(jù)通關(guān)第幾關(guān)。
2.商店可能有不同類型的商店。
3.任務(wù)系統(tǒng)中,不同的計(jì)數(shù)類型,不同的任務(wù)目標(biāo)類型。
4.功能開啟中,不同的系統(tǒng)開啟條件不同。
....
稍微復(fù)雜一點(diǎn)的系統(tǒng)都會(huì)涉及到多態(tài)。
我們往往需要采用一種一致的接口去處理,這樣子可以避免冗余代碼。但是他們需要的數(shù)據(jù)卻不同。
經(jīng)過我的實(shí)踐,我覺得一種比較好的寫法如下:
ETest.java? // 枚舉所有的類型
package org.example.enumDuoTai;import org.example.enumDuoTai.data.ATestData;
import org.example.enumDuoTai.data.BTestData;
import org.example.enumDuoTai.data.ITestData;public enum ETest {A {@Overridepublic void test(ITestData data) {ATestData aTestData = data.get();System.out.println("roleId="+ aTestData.getRoleId() + " a=" + aTestData.getA());}},B {@Overridepublic void test(ITestData data) {BTestData bTestData = data.get();System.out.println("sn="+ bTestData.getSn() + " B=" + bTestData.getB());}},;public abstract void test(ITestData data);
}
ITestData.java // 數(shù)據(jù)接口
package org.example.enumDuoTai.data;@SuppressWarnings("all")
public interface ITestData {default <T extends ITestData> T get(){return (T)this;}
}
ATestData.java // 數(shù)據(jù)參數(shù)實(shí)現(xiàn)1
package org.example.enumDuoTai.data;import lombok.AllArgsConstructor;
import lombok.Data;@Data
@AllArgsConstructor
public class ATestData implements ITestData{private long roleId;private int a;
}
BTestData.java //?數(shù)據(jù)參數(shù)實(shí)現(xiàn)
package org.example.enumDuoTai.data;import lombok.AllArgsConstructor;
import lombok.Data;@Data
@AllArgsConstructor
public class BTestData implements ITestData{private int sn;private String b;
}
Main.java
package org.example.enumDuoTai;import org.example.enumDuoTai.data.ATestData;
import org.example.enumDuoTai.data.BTestData;public class Main {public static void main(String[] args) {ETest.A.test(new ATestData(4097, 1));ETest.B.test(new BTestData(1001, "jn"));}
}/*
roleId=4097 a=1
sn=1001 B=jn*/
總結(jié):
這樣子,我們就可以在枚舉中無限擴(kuò)展,像我做的MMO游戲,排行榜來說,最多也就35種,看起來行數(shù)多了點(diǎn),但是實(shí)際上維護(hù)性還是可以。這種枚舉的多態(tài),實(shí)現(xiàn)比較簡(jiǎn)單。
這樣子通過接口,讓所有的操作都是強(qiáng)類型的,是比較簡(jiǎn)單的。
而且枚舉有values,天然實(shí)現(xiàn)了遍歷,也就是工廠模式。