標籤:
簡單原廠模式:是由一個工廠對象決定建立出哪一種產品類的執行個體,簡單原廠模式是原廠模式家族中最簡單實用的模式。
目的:為建立對象提供過渡介面,以便將建立對象的具體過程屏蔽隔離起來,達到提高靈活性的目的。
它的組成:
1) 工廠類角色:這是本模式的核心,含有一定的商業邏輯和判斷邏輯。在java中它往往由一個具體類實現。
2) 抽象產品角色:它一般是具體產品繼承的父類或者實現的介面。在java中由介面或者抽象類別來實現。
3) 具體產品角色:工廠類所建立的對象就是此角色的執行個體。在java中由一個具體類實現。
以一個工廠生產電視和手機為例進行解釋:
首先定義分別定義兩個類代表電視和手機,並且都實現了work介面
1 interface work{ 2 public void working(); 3 } 4 class Phone implements work{ 5 6 @Override 7 public void working() { 8 System.out.println("生產手機"); 9 }10 11 }12 class Tv implements work{13 14 @Override15 public void working() {16 System.out.println("生產電視");17 }18 19 }
接著如果想使用這兩個類,可以用普通建立對象的方法
1 public class Test10 { 2 3 public static void main(String[] args) { 4 Phone phone=new Phone(); 5 phone.working(); 6 7 Tv tv=new Tv(); 8 tv.working(); 9 }10 11 }
這樣使用的不好處就是,如果Phone類和TV類一旦改變,就得改變上述代碼,可以說類Test10依賴於Phone類和TV類,稱這種依賴為耦合:使用者直接使用了具體類,表示當前類依賴該具體類。這樣當這個具體類發生變化,使用者將受到影響。
為了降低這種影響,引入原廠模式:
增加一個工廠類
1 class Factory{ 2 public static Work getWork(String product){ 3 if("phone".equals(product)){ 4 return new Phone(); 5 }else if("tv".equals(product)){ 6 return new Tv(); 7 } 8 return null; 9 }10 }
這樣Test10類的代碼就可以為:
1 public class Test10 { 2 3 public static void main(String[] args) { 4 //依賴介面 5 Work work=Factory.getWork("tv"); 6 if(work!=null){ 7 work.working(); 8 } 9 }10 11 }
這樣它由依賴一個具體類轉化為依賴介面,降低了耦合,體現了面向介面編程的思想。
這樣具體類的變化不會影響到它。
這樣寫代碼雖說和上述結果一樣,但是可擴充性增強,維護性更強。
————————————————————————歡迎各位博友指出不足之處,多多交流。
Java模式—簡單原廠模式