文章出處
View Code
View Code
View Code
View Code
View Code
文章列表
這個工廠方法模式,是簡單工廠的延伸,不同點在于,將某個具體的類繼續細分,將核心部分抽象成一個接口。而簡單工廠,把核心寫在了一個類上,不利于拓展。
舉個例子,簡單工廠中有蘋果類,香蕉類,我們創建了一個FruitFactory的工廠類,用來生成蘋果和香蕉類的實例。
但是如果我們需要創建更多的水果類,這時候就需要修改FruitFactory工廠類。這樣做很不方便。
這時候就有了工廠方法模式的實現。
具體方法是我們將總的工廠類,抽象成一個接口,然后創建蘋果類工廠和香蕉類工廠,去實現這個接口。
這樣即使我們再添加橘子類,我們需要創建橘子類工廠去實現水果工廠的接口。
在客戶端的調用中就可以輕松獲得橘子對象。
直接上代碼:
1.創建一個水果接口,讓水果們都去實現它。
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public interface Fruit { 2 public void Get(); 3 }
2.創建蘋果類和香蕉類。
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public class Apple implements Fruit{ 2 public void Get() 3 { 4 System.out.println("Apple"); 5 } 6 } 7 8 public class Banana implements Fruit { 9 public void Get() { 10 System.out.println("Banana"); 11 } 12 }
3.創建水果工廠的接口。
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public interface FruitFactory { 2 public Fruit getFruit(); 3 }
4.創建蘋果工廠和香蕉工廠,去實現水果工廠的接口。
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public class AppleFactory implements FruitFactory{ 2 public Fruit getFruit() { 3 return new Apple(); 4 } 5 } 6 7 public class BananaFactory implements FruitFactory { 8 public Fruit getFruit() { 9 return new Banana(); 10 } 11 }
5.主客戶端要做的事。
![](https://imageproxy.pixnet.cc/imgproxy?url=https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public class MainClass { 2 public static void main(String[] args) throws InstantiationException, IllegalAccessException { 3 FruitFactory appleFactory=new AppleFactory(); 4 FruitFactory bananaFactory=new BananaFactory(); 5 Fruit apple=appleFactory.getFruit(); 6 Fruit banana=bananaFactory.getFruit(); 7 apple.Get(); 8 banana.Get(); 9 } 10 }
這樣就完成了工廠方法模式與簡單工廠的結合。極大的降低了耦合。
文章列表
全站熱搜