java 工廠設計模式

//工廠設計模式
/*在接口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();
}
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章