如果是在需求還沒確定或者是在兩個類實現相近功能時候,會大量使用下面的方式:
--抽象類,注意其中的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();