public abstract class ChemicalFactory { public abstract <T extends Chemical> T createChemical(Class<T> clz); }
然后定义化工女神的化肥工厂:
public class GoddessChemicalFactory extends ChemicalFactory { @Override public <T extends Chemical> T createChemical(Class<T> clz) { Chemical chemical = null; try { chemical = (Chemical)Class.forName(clz.getName()).newInstance(); }catch (Exception e){ e.printStackTrace(); } return (T) chemical; } }
接下来定义一个抽象的化肥类:
public abstract class Chemical { /** * 化肥特征之一——投放到地上 */ public abstract void toGround(); /** * 化肥特征之二——变成气体后才会起作用 */ public abstract void becomeGas(); }
定义氮肥类:
public class NChemical extends Chemical { @Override public void toGround() { Log.e("NChemical","氮肥被投放到白菜地里"); } @Override public void becomeGas() { Log.e("NChemical","氮肥释放含N元素的气体被白菜的叶子吸收"); } }
定义磷肥类:
public class PChemical extends Chemical { @Override public void toGround() { Log.e("PChemical","磷肥被投放到西红柿地里"); } @Override public void becomeGas() { Log.e("PChemical","磷肥释放含P元素的气体被西红柿的果实吸收"); } }
定义钾肥类:
public class KChemical extends Chemical { @Override public void toGround() { Log.e("KChemical","钾肥被投放到胡萝卜地里"); } @Override public void becomeGas() { Log.e("KChemical","钾肥释放含K元素的气体被胡萝卜的根系吸收"); } }
定义×××类:
public class Explosive extends Chemical { @Override public void toGround() { Log.e("Explosive","×××被投放到敌人阵地里"); } @Override public void becomeGas() { Log.e("Explosive","×××释放温度高的气体(火焰)和速度快的气体(冲击波)被敌人的身体吸收"); } }