如果是在需求还没确定或者是在两个类实现相近功能时候,会大量使用下面的方式:
--抽象类,注意其中的newInstance方法的实现
package com.moonsoft.design;
public abstract class Moon {
public static Moon newInstance(String classStr){
Class re;
try {
re = Class.forName(classStr);
return (Moon)re.newInstance();
}
catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
public abstract void println();
}
--从Moon类派生出来的一个字类,提供println方法的一种实现方式
package com.moonsoft.design;
public class Moon1 extends Moon {
public void println(){
System.out.println("I am moon1");
}
public void myprintln(){
System.out.println("I am moon1 myprintln");
}
}
--从Moon类派生出来的另一个字类,提供println方法的另一种实现方式
package com.moonsoft.design;
public class Moon2 extends Moon {
public void println(){
System.out.println("I am moon2!");
}
}
--调用
Moon moon = Moon.newInstance("com.moonsoft.design.Moon1");
moon.println();
或
Moon moon = Moon.newInstance("com.moonsoft.design.Moon2");
moon.println();