設計模式基本同時也是應用最廣泛的就是工廠模式。
首先來看一個簡單工廠模式:
public class OperateFactory{ public static Operate createOperate(String operate){ Operate of = new Operate(); switch(operate){ case "+":of=new AddOperate(); case "-":of=new DeduceOperate(); } return of; } }
public class Operate{
protected int numA;
protected int numB;
}
public class AddOperate extends Operate{
public int getResult(){
int result = super.numA+super.numB;
return result;
}
}
客戶端
public static void main(String[] args) {
Operate op = OperateFactory.createOperate("+");
op.numA=1;
op.numB=2;
op.getResult();
}
這是一個簡單工廠模式,通過OperateFactory來實例化我們所需要的東西。假設增加乘法運算,修改工程類和增加一個MulOperate繼承Operate即可。
簡單工廠模式好處就是結構簡單,能夠實現代碼複用,易於閱讀。
下面我們在來看看工廠模式:還是實現以上功能。
public interface IFactory{
public Operate createOperate();
}
public class OperateAdd extends IIFactory{
@Override
public Operate createOperate(){
return new AddOperate();
}
}
同樣,上邊的Operate跟運算類不變
public class Operate{
protected int numA;
protected int numB;
}
public class AddOperate extends Operate{
public int getResult(){
int result = super.numA+super.numB;
return result;
}
}
客戶端
public static void main(String[] args) {
Operate op = OperateAdd.createOperate();
op.numA=1;
op.numB=2;
op.getResult();
}
簡單看上去工廠模式要比簡單工廠模式要麻煩些。同樣,我們假設要增加一個乘法類該如何做?
我們只需新增一個OperateMul繼承IFactory接口,和一個運算類就可以了,我們不需要在更改我們的工廠類了。
工廠模式好處就是將實例化交給了子類,工廠類不再包含邏輯運算。這樣就實現了開放—封閉原則。簡單工廠類每次我們都有修改工廠類,對該類來說修改時不封閉的。對於小型的系統來說簡單工廠的可讀性使得他更實用,但是對於大型系統來說,工廠模式更加適合。