文章出處
文章列表
抽象工廠模式,可以向客戶端提供一個接口,而客戶端不用指定具體的類型創建對象,卻能夠創建多個產品族(一類具有共性產品,如地域等)的對象。
下面直接上代碼。
1.蘋果需要實現水果的接口,而蘋果可以有北方的蘋果,也可以有南方的蘋果,所以也可以抽象成一個父類。
1 public interface Fruit { 2 public void Get(); 3 } 4 5 public abstract class Apple implements Fruit{ 6 public abstract void Get(); 7 }
2.南北方的蘋果均需要繼承這個父類,并實現父類的中的get方法。
1 public class NorthApple extends Apple { 2 public void Get() { 3 System.out.println("北方蘋果"); 4 } 5 } 6 7 public class SouthApple extends Apple { 8 public void Get() { 9 System.out.println("南方蘋果"); 10 } 11 }
3.香蕉的做法與蘋果類似,抽象的父類繼承水果接口,假設南北方都有香蕉吧。
1 public abstract class Banana implements Fruit { 2 public abstract void Get() ; 3 } 4 5 public class SouthBanana extends Banana { 6 public void Get() { 7 System.out.println("南方香蕉"); 8 } 9 } 10 11 public class NorthBanana extends Banana { 12 public void Get() { 13 System.out.println("北方香蕉"); 14 } 15 }
4.這樣創建的就都創建完成了。這時候我們考慮的問題,我們要想獲得蘋果的對象,或者獲得香蕉的對象,應該有這樣一個工廠去獲得。但是蘋果與香蕉是分南北的,所以我們需要南北工廠,這兩個工廠就是“族”的概念。
這時候可以抽象出水果工廠的接口,接口中的方法分別是獲取蘋果對象,香蕉對象。
1 public interface FruitFactory { 2 public Fruit getApple(); 3 public Fruit getBanana(); 4 }
5.南北工廠需要實現這個接口。
1 public class SouthFruitFactory implements FruitFactory { 2 public Fruit getApple() { 3 return new SouthApple(); 4 } 5 public Fruit getBanana() { 6 return new SouthBanana(); 7 } 8 } 9 10 public class NorthFruitFactory implements FruitFactory { 11 public Fruit getApple() { 12 return new NorthApple(); 13 } 14 public Fruit getBanana() { 15 return new NorthBanana(); 16 } 17 }
6.這樣兩個產品族就創建完成了,我們只需要在主客戶端中創建南方的工廠,就可以通過調用getApple()方法,得到南方蘋果的實例。其他亦然。
1 public class MainClass { 2 public static void main(String[] args) { 3 FruitFactory factory=new NorthFruitFactory(); //獲取北方水果工廠的實例 4 Fruit apple=factory.getApple(); //北方蘋果 5 Fruit banana=factory.getBanana(); //北方香蕉 6 apple.Get(); 7 banana.Get(); 8 9 FruitFactory factory2=new SouthFruitFactory(); //獲取南方水果工廠的實例 10 Fruit apple2=factory2.getApple(); //南方蘋果 11 Fruit banana2=factory2.getBanana(); //南方香蕉 12 apple2.Get(); 13 banana2.Get(); 14 } 15 }
個人理解,這個抽象工廠模式,在主客戶端調用的時候,只需要獲取相應的工廠,就可以得到想要的對象(不用指定具體要獲取的對象),實現相應的方法。這里與最開始抽象工廠的方法結合著理解就ok。
文章列表
全站熱搜