工廠模式

1.工廠模式:

項目中一般會這樣寫:

public static Api create(int type){

????????switch (type) {

????????????????case 1:

????????????????return new ImplA();

????????????????case 2:

????????????????return new ImplB();

????????????????case 3:

????????????????return new ImplC();

????????????????default:

????????????????return new ImplC();

????}

}

這樣寫的話 后續(xù)如果需要添加更多類型,就需要寫更多的case,有時新增的會忘記寫return,會造成不必要的麻煩

其實可以這樣寫更優(yōu)雅:

publicT creatProduct(Class clz)

{

????????Api? api=null;

????????try {

????????????????api=(Api) Class.forName(clz.getName()).newInstance();

? ? ? ? ?} catch (InstantiationException | IllegalAccessException

????????????????| ClassNotFoundException e) {

????????????????// TODO Auto-generated catch block

????????????????e.printStackTrace();

????????}

????????return (T)api;

}

當(dāng)然,這還不是最好,我們可以將調(diào)用層和建造層分離開,這就是抽象工廠模式

//實例需要建造的接口

public interface IApi {

????????void newInstance();

}

//工廠建造接口

public interface IFactory {

????????IApi create();

}

public class ImplA implements IApi{

????????@Override

? ? ? ? ?public void newInstance() {

????????}

}

//工廠實現(xiàn)類A

public class ImplAFactory implements IFactory {

????????@Override

????????public IApi create() {

????????????????return new ImplA();

????????}

}

//工廠實現(xiàn)類B

public class ImplBFactory implements IFactory {

????????@Override

????????public IApi create() {

????????????????return new ImplB();

????????}

}

//實際調(diào)用

public class Test {

????????public static void main(String[] args) {

????????????????IFactory factory=new ImplAFactory();

????????????????factory.create().newInstance();

????????}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容