文章出處

這個工廠方法模式,是簡單工廠的延伸,不同點在于,將某個具體的類繼續細分,將核心部分抽象成一個接口。而簡單工廠,把核心寫在了一個類上,不利于拓展。

舉個例子,簡單工廠中有蘋果類,香蕉類,我們創建了一個FruitFactory的工廠類,用來生成蘋果和香蕉類的實例。

但是如果我們需要創建更多的水果類,這時候就需要修改FruitFactory工廠類。這樣做很不方便。

這時候就有了工廠方法模式的實現。

具體方法是我們將總的工廠類,抽象成一個接口,然后創建蘋果類工廠和香蕉類工廠,去實現這個接口。

這樣即使我們再添加橘子類,我們需要創建橘子類工廠去實現水果工廠的接口。

在客戶端的調用中就可以輕松獲得橘子對象。

直接上代碼:

1.創建一個水果接口,讓水果們都去實現它。

1 public interface Fruit {
2     public void Get();
3 }
View Code

2.創建蘋果類和香蕉類。

 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 }
View Code

3.創建水果工廠的接口。

1 public interface FruitFactory {
2     public Fruit getFruit();
3 }
View Code

4.創建蘋果工廠和香蕉工廠,去實現水果工廠的接口。

 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 }
View Code

5.主客戶端要做的事。

 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 }
View Code

這樣就完成了工廠方法模式與簡單工廠的結合。極大的降低了耦合。

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()