工廠模式的使用場景是爲了統一管理對象的實例化,當對象改變的時候不需要改動太大代碼量就能增加或修改,以便代碼的維護。
首先有一個Car的接口
public interface Car{
public void run();
}
接下來寶馬和奔馳分別實現了該接口
</pre>public class BMW implements Car{<span style="white-space:pre"> </span>@Override<span style="white-space:pre"> </span>public void run() {<span style="white-space:pre"> </span>System.out.println("寶馬在飛馳");<span style="white-space:pre"> </span>}}<pre name="code" class="java">
</pre>public class Benz implements Car{<span style="white-space:pre"> </span>@Override<span style="white-space:pre"> </span>public void run() {<span style="white-space:pre"> </span>System.out.println("奔馳在飛馳");<span style="white-space:pre"> </span>}}<pre name="code" class="java">
汽車工廠:
public class CarFactory {
public Car createCar(String car){
if("BMW".equals(car)){
return new BMW();
}else{
return new Benz();
}
}
}
簡單工廠模式就是在工廠裏面生產用戶需要的對象,不需要用戶實例化,對象由工廠維護。
貼一下在寫的代碼裏的應用:
import java.util.List;
import com.toone.xmdj.util.validator.ValidatorResultMessge;
public class ValidatorTypeContext {
private ValidatorTypeAbstract val = null;
public ValidatorTypeContext(String str,Object obj){
if("Map".equals(str)){
ValidatorTypeWithMapUtil cs = new ValidatorTypeWithMapUtil(obj);
val=cs;
}else if("Entity".equals(str)){
ValidatorTypeWithEntityUtil cs = new ValidatorTypeWithEntityUtil(obj);
val=cs;
System.out.println();
}
}
public ValidatorResultMessge selectValidatorTypeMap(Object obj,List<String> checkList) throws Exception{
ValidatorResultMessge result = new ValidatorResultMessge();
if("checkNotNull".equals(obj)){
result = val.checkNotNull(checkList);
}else if("checkIsNumber".equals(obj)){
result = val.checkIsNumber(checkList);
}else if("checkIsMobile".equals(obj)){
result = val.checkIsMobile(checkList);
}
return result;
}
}
我的代碼裏是通過Context構造方法實例化ValidatorTypeAbstract 對象,並在selectValidatorTypeMap使用這個實例化的對象。同時我這裏也採用了策略模式,ValidatorTypeAbstract 作爲抽象的策略類,ValidatorTypeWithMapUtil 和ValidatorTypeWithEntityUtil 分別是實現策略類的具體策略。通過Context(環境類)對策略類進行實例化,並使用相應的方法。