舉例一:現在有乙個任務task,有任務型別(txt_to_mysql、mysql_to_txt、mongo_to_txt),任務引數,根據不同的任務型別去處理引數並且呼叫不同的util方法。普通的寫法會是:
if("txt_to_mysql".equals(type))
if("mysql_to_txt".equals(type))
if("mongo_to_txt".equals(type))
這樣會使**顯得比較雜亂,後期擴充套件型別也不便於維護。這種情況就可以使用工廠模式去獲取例項化物件,由不同的例項化物件去實現各自的處理方法:
1、父類:
/**
* kettle任務
*/public class kettletask
public kettletask(mapparams,eltask eltask)
/**省略所有get和set方法**/
//執行邏輯
public eltask run() throws exception
}
2、實現子類:
(1)
public class mongo2txttask extends kettletask
public mongo2txttask(mapparams, eltask eltask)
@override
public eltask run() throws exception
}
(2)
public class mysql2txttask extends kettletask
public mysql2txttask(mapparams, eltask eltask)
@override
public eltask run() throws exception
}
(3)
public class txt2mysqltask extends kettletask
public txt2mysqltask(mapparams, eltask eltask)
@override
public eltask run() throws exception
}
3、工廠類:
public class kettletaskfactory
return kettletask;
}}
現在大段大段的if...else就可以改為:
kettletask kettletask = kettletaskfactory.getkettletask(step.getsteptype(),params,eltask);
eltask = kettletask.run();
return eltask;
舉例二:子類轉成父類是自動的,如:
public pageinfopagelist(importdataquery query) else if("2".equals(importtype))
return new pageinfo<>(result);
}
listselect(@param("query") importdataquery query);
select
from project_one
where status = #
order by id
實體類:
public class importdata
public class project1 extends importdata
public class project2 extends importdata
java設計模式之二工廠模式
工廠模式主要用一下幾種形態 1 簡單工廠 factory 2 工廠方法 factory method 3 抽象工廠 abstract factory 又叫靜態工廠,是工廠模式三中狀態中結構最為簡單的。主要有乙個靜態方法,用來接受引數,並根據引數來決定返回實現同一介面的不同類的例項。我們來看乙個具體的...
java設計模式(二) 抽象工廠模式
例子背景 隨著客戶的要求越來越高,寶馬車需要不同配置的空調和發動機等配件。於是這個工廠開始生產空調和發動機,用來組裝汽車。這時候工廠有兩個系列的產品 空調和發動機。寶馬320系列配置a型號空調和a型號發動機,寶馬230系列配置b型號空調和b型號發動機。概念 抽象工廠模式是工廠方法模式的公升級版本,他...
JAVA設計模式二簡單工廠模式
一 簡單工廠模式 就是建立乙個工廠類,對實現了同一介面 或者繼承同一類 的一些類進行例項的建立。獲取例項的方法返回值為介面或父類物件 用到多型父類引用指向子類 物件 乙個模式使用了封裝繼承和多型 共同的實現介面 帶有傳送方法的傳送器介面 public inte ce sender 傳送郵箱的類 pu...