/*在接口Run中開始有兩個方法runApp()和runApache();
*後期因業務需要,需要系統擴展,需要新加兩個實現類RunImplB、RunImplC;
*此時我們發現,不光需要修改實現類還需要修改客戶端代碼
*這樣的設計不太合理,無疑增加了代碼維護工作量
*因此想一種好的辦法,就是接口的修改後,不需要修改客戶端,就能達到目的
*基於以上分析,工廠設計模式(factory_design_pattern)就由此展開
*即設計一個普通類,使用該類的靜態方法拿到相關的執行類。
*/
interface Run{ //設計接口Run,並定義該接口的三個方法
public void runApp();
public void runApache();
public void cleanServer();
}
//接口的實現類,每個接口的實現類必須要實現接口的所有方法
class RunImplA implements Run{
public void runApp(){
System.out.println("App運行成功!");}
public void runApache(){
System.out.println("服務運行成功!");
}
public void cleanServer(){
System.out.println("清除服務器垃圾!");
}
}
class RunImplB implements Run{
public void runApp(){
System.out.println("已啓動");
}
public void runApache(){
System.out.println("端口被佔用,啓動失敗!");
}
public void cleanServer(){
System.out.println("垃圾已清理!");
}
}
class RunImplC implements Run{
public void runApp(){
System.out.println("啓動失敗");
}
public void runApache(){
System.out.println("啓動成功");
}
public void cleanServer(){
System.out.println("清理中!");
}
}
//定義工廠類
class Factory{public static Run getInstance(String className){ //使用該靜態直接取得接口實例,返回值爲該接口
if("RunImplA".equals(className)){
return new RunImplA();
}if("RunImplB".equals(className)){
return new RunImplB();
}else if("RunImplC".equals(className)){
return new RunImplC();
}else{
return null;
}
}
}
//測試類
public class FactoryTest{public static void main(String[] args){
Run factory = Factory.getInstance(args[0]); //爲了模擬操作,我們在這裏傳入初始化操作;
if(factory != null){ //在命令提示符窗口運行時,將實例化類名傳給它即可;
factory.runApache(); //比如:java FactoryTest RunImplA;
factory.runApp();
factory.cleanServer();
}
}
}