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();
????????}
}