Java類的設計模式(二)工廠模式

2021-09-25 03:34:31 字數 2055 閱讀 3350

舉例一:現在有乙個任務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...