网站编辑,物联网平台开源,网络推广是啥,建设局网站背景#xff1a;
游戏服务器中#xff0c;多态可以说体现的淋漓尽致。
如#xff1a;
1.开启条件。有的系统是根据玩家等级#xff0c;有的是根据通关第几关。
2.商店可能有不同类型的商店。
3.任务系统中#xff0c;不同的计数类型#xff0c;不同的任务目标类型。…背景
游戏服务器中多态可以说体现的淋漓尽致。
如
1.开启条件。有的系统是根据玩家等级有的是根据通关第几关。
2.商店可能有不同类型的商店。
3.任务系统中不同的计数类型不同的任务目标类型。
4.功能开启中不同的系统开启条件不同。
....
稍微复杂一点的系统都会涉及到多态。 我们往往需要采用一种一致的接口去处理这样子可以避免冗余代码。但是他们需要的数据却不同。
经过我的实践我觉得一种比较好的写法如下
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 // 数据接口
package org.example.enumDuoTai.data;SuppressWarnings(all)
public interface ITestData {default T extends ITestData T get(){return (T)this;}
}ATestData.java // 数据参数实现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 // 数据参数实现
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));}
}/*
roleId4097 a1
sn1001 Bjn*/
总结
这样子我们就可以在枚举中无限扩展像我做的MMO游戏排行榜来说最多也就35种看起来行数多了点但是实际上维护性还是可以。这种枚举的多态实现比较简单。
这样子通过接口让所有的操作都是强类型的是比较简单的。
而且枚举有values天然实现了遍历也就是工厂模式。