簡單工廠模式 簡單工廠模式分為三種:普通簡單工廠、多方法簡單工廠、靜態方法簡單工廠。 普通工廠模式 最近看了老酒館電視劇,深深被陳懷海他們的情懷所感動,當然裡面也有很多的酒,比如扳倒井,悶倒驢,跑舌頭,吹破天,二閨女,枕頭親。我們以酒為例: 創建酒的介面: public interface Liqu ...
簡單工廠模式
簡單工廠模式分為三種:普通簡單工廠、多方法簡單工廠、靜態方法簡單工廠。
普通工廠模式
最近看了老酒館電視劇,深深被陳懷海他們的情懷所感動,當然裡面也有很多的酒,比如扳倒井,悶倒驢,跑舌頭,吹破天,二閨女,枕頭親。我們以酒為例:
創建酒的介面:
public interface Liqueur {
public void taste();//酒味
}
創建實現類:
(1)悶倒驢味道
1 public class Mdl implements Liqueur {
2 @Override
3 public void taste() {
4 System.out.println("我是悶倒驢,辣的!");
5 }
6 }
(2)跑舌頭味道(裡面的杜先生舌頭惹了禍,沒了,特意點了這跑舌頭)
1 public class Pst implements Liqueur {
2 @Override
3 public void taste() {
4 System.out.println("我是跑舌頭,苦的!");
5 }
6 }
建工廠類:
1 public class MakeLiqueurFactory {
2
3 /**
4 * 製造悶倒驢和跑舌頭
5 */
6 public Liqueur make(String type){
7 if ("mdl".equalsIgnoreCase(type)){
8 return new Mdl();
9 }else if ("pst".equalsIgnoreCase(type)){
10 return new Pst();
11 }else {
12 return null;
13 }
14 }
15 }
測試:
1 public class LiqueurTest {
2
3 public static void main(String[] args){
4 MakeLiqueurFactory factory = new MakeLiqueurFactory();
5 Liqueur mdl = factory.make("mdl");
6 mdl.taste();
7 Liqueur pst = factory.make("pst");
8 pst.taste();
9 }
10 }
多方法簡單工廠
在普通工廠方法模式中,如果傳遞的字元串出錯,則不能正確創建對象,而多個工廠方法模式是提供多個工廠方法,分別創建對象。
1 public class MakeLiqueurFactory {
2
3 /**
4 * 製造悶倒驢
5 */
6 public Liqueur makeMdl(){
7 return new Mdl();
8 }
9
10 /**
11 * 製造跑舌頭
12 */
13 public Liqueur makePst(){
14 return new Pst();
15 }
16 }
測試:
1 public class LiqueurTest {
2
3 public static void main(String[] args){
4 MakeLiqueurFactory factory = new MakeLiqueurFactory();
5 Liqueur mdl = factory.makeMdl();
6 mdl.taste();
7 Liqueur pst = factory.makeMdl();
8 pst.taste();
9 }
10 }
靜態方法簡單工廠
將上面的多個工廠方法模式里的方法置為靜態的,不需要創建實例,直接調用即可。
1 public class MakeLiqueurFactory {
2
3 /**
4 * 製造悶倒驢
5 */
6 public static Liqueur makeMdl(){
7 return new Mdl();
8 }
9
10 /**
11 * 製造跑舌頭
12 */
13 public static Liqueur makePst(){
14 return new Pst();
15 }
16 }
測試:
1 public class LiqueurTest {
2
3 public static void main(String[] args){
4 Liqueur mdl = MakeLiqueurFactory.makeMdl();
5 mdl.taste();
6 Liqueur pst = MakeLiqueurFactory.makePst();
7 pst.taste();
8 }
9 }
結果都是如下所示:
1 我是悶倒驢,辣的!
2 我是跑舌頭,苦的!
在以上的三種模式中,第一種如果傳入的字元串有誤,不能正確創建對象,第三種相對於第二種,不需要實例化工廠類,所以,大多數情況下,我們會選用第三種——靜態工廠方法模式。