Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發之工廠模式初探

Android開發之工廠模式初探

編輯:關於Android編程

工廠模式(Factory)是比較常見的一種模式我覺得也是一種非常容易理解的一種模式,舉個簡單的例子吧,我們小時候經常考試,每次最害怕的就是爸媽問考試試卷的分數,不同的分數我們的心情也是不一樣的。那麼我們就根據這個情況以工廠模式寫一個Java程序。

public class Factory {
     public  static Student_test  creator(String rank){
    	 if(rank.equals("優秀")){
    		 return  new Student_Laugh();
    	 }else{
    		 return  new Student_Cry();
    	 }
     }
}
在這裡我們建立了一個工廠類根據該學生得到的不同成績,生成該學生不同情緒的反應類。很多人覺得我直接根據值new Student()類不就好了,是的啊這樣的邏輯沒有問題,但是如果創建Student實例時所做的初始化工作不是象賦值這樣簡單的事,我們都知道我們苦逼的分數都是由我們老師打得,是經歷了一個很長的閱卷過程,轉化起來可能是很長一段代碼,如果也寫入構造函數中,那我們的代碼很難看了(就需要Refactor重整)。
為什麼說代碼很難看,大部分人剛開始可能沒有這種感覺,我剛開始也是這麼覺得。但是我們分析一下,初始化工作如果是很長一段代碼,說明要做的工作很多,將很多工作裝入一個方法中,相當於將很多雞蛋放在一個籃子裡,是很危險的,這也是有背於Java面向對象的原則,面向對象的封裝(Encapsulation)和分派(Delegation)告訴我們,盡量將長的代碼分派“切割”成每段,將每段再“封裝”起來(減少段和段之間偶合聯系性),這樣就會將風險分散,以後如果需要修改,只要更改每段,不會再發生牽一動百的事情。
在本例中,首先,我們需要將創建實例的工作與使用實例的工作分開, 也就是說,讓創建實例所需要的大量初始化工作從Student的構造函數中分離出去。
在構建工廠類的時候呢,除了上述的工廠類Factory,還有抽象類Student
public abstract class Student {

}
Student的子類laugh,cry類繼承抽象類Student共同組成。

下面我們再來介紹一下抽象工廠模型,這兩個模式區別在於需要創建對象的復雜程度上。如果我們創建對象的方法變得復雜了,如上面工廠方法中是創建一個對象Student_test,如果學生還有普通不考試的狀態Student_normal,這怎麼辦呢!我們繼續上面的比方,一個家比喻成一個工廠,他們家有兩個小孩,兩個小孩還是都要去考試吧,都會有考試成績吧,但雖然是一個爸媽生的,對於分數的表現也是不一樣的吧。按照上述場景,我們在寫一個抽象工廠模型。

public abstract class Factory{
	
public abstract Student_normal creator();

public abstract Student_test creator(String name);

}
public class SimpleFactory extends Factory{
	
public Student_normal creator(){ 
	......... 
	return new StudentA 
			}
public Student_test creator(String name){
	.........
	return new StudentA_laugh|cry  
			}
}
public class BombFactory extends Factory{
	
	public Student_normal creator(){
		...... 
		return new StudentB
				}
	public Student_test creator(String name){
		...... 
		return new StudentB_laugh|cry 
				}
	}
}

從上述代碼分析,我們總共有兩個抽象的creator類Student_normal和Student_test類,代表平時學生的兩種狀態,考試和不考試的狀態,而每一個抽象類模型下面又有剛說的那兩孩子,Student_normal類下面StudentA、StudentB,以此類推。那麼我們為什麼不直接建兩個工廠就好了啊,因為他們是彼此有鏈接,有關系的,,我們將共同部分封裝在抽象類中,不同部分使用子類實現。

抽象工廠模型相比普通工廠模型而言就多了一類角色[抽象工廠類],需要普通工廠類繼承抽象工廠類來實現,抽象工廠類封裝了生產商品共用的方法,普通工廠類則專門負責其單一的一類具體產品的生產。




  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved