工廠方法模式 簡單工廠模式有一個問題就是,類的創建依賴工廠類。 如果想要拓展程式,必須對工廠類進行修改,這違背了閉包原則,所以,從設計角度考慮,有一定的問題,如何解決? 就用到工廠方法模式,創建一個工廠介面和創建多個工廠實現類,這樣一旦需要增加新的功能,直接增加新的工廠類就可以了,不需要修改之前的代 ...
工廠方法模式
簡單工廠模式有一個問題就是,類的創建依賴工廠類。
如果想要拓展程式,必須對工廠類進行修改,這違背了閉包原則,所以,從設計角度考慮,有一定的問題,如何解決?
就用到工廠方法模式,創建一個工廠介面和創建多個工廠實現類,這樣一旦需要增加新的功能,直接增加新的工廠類就可以了,不需要修改之前的代碼。
新建酒的介面:
1 public interface Liqueur {
2 public void taste();//酒味
3 }
新建工廠的介面:
1 public interface Make {
2 /**
3 * 造酒的介面,造不同的酒,返回不同的酒味
4 * @return Liqueur
5 */
6 public Liqueur makeLiqueur();
7 }
創建酒的實現類:
(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)製造悶倒驢工廠
1 /**
2 * 製造悶倒驢工廠
3 */
4 public class MakeMdlFactory implements Make{
5 /**
6 * 製造悶倒驢
7 * @return 悶倒驢味道
8 */
9 @Override
10 public Liqueur makeLiqueur() {
11 return new Mdl();
12 }
13 }
(2)製造跑舌頭工廠
1 /**
2 * 製造跑舌頭工廠
3 */
4 public class MakePstFactory implements Make {
5 /**
6 * 製造跑舌頭
7 * @return 跑舌頭味道
8 */
9 @Override
10 public Liqueur makeLiqueur() {
11 return new Pst();
12 }
13 }
測試:
1 public class LiqueurTest {
2
3 public static void main(String[] args){
4 Make mdlFactory = new MakeMdlFactory();
5 Liqueur mdl = mdlFactory.makeLiqueur();
6 mdl.taste();
7
8 Make pstFactory = new MakeMdlFactory();
9 Liqueur pst = pstFactory.makeLiqueur();
10 mdl.taste();
11 }
12 }
1 我是悶倒驢,辣的!
2 我是悶倒驢,辣的!
這個模式的好處就是,如果你想增加功能(增加一種酒叫二閨女),只需做一個實現類,實現Liqueur介面,同時做一個工廠類,實現Make介面,就OK了。
無需去改動現成的代碼,這樣做,拓展性較好!