(物件建立型模式)
定義乙個用於建立物件的介面,讓子類決定例項化那個類。工程方法使乙個類的例項化延遲到其子類。
大學裡面有很多不同的學院,不同的學院教育並輸出(生產出)不同專業的學生。現在有三個學院,分別是軟體專業,物理專業,英語專業。輸出每個學院的乙個學生。
public
abstract
class
student
//專業不同,由子類去實現。
public
abstract
void
mymajor();
}
//英語專業學生
public
class
englishstudent
extends
student
}
//物理專業學生
public
class
physicsstudent
extends
student
}
//軟體專業學生
public
class
softwarestudent
extends
student
}
public
abstract
class
college
teachingstudent:負責生產學生物件。
public
class
scnucollege
extends
college catch (instantiationexception | illegalacces***ception
| classnotfoundexception e)
return (t)student;
}}
通過反正獲取類的名字,例項化生成對應的學生類物件
package factorymethod;
public
class main
}
輸出:
my major is physics...
my major is english...
my major is software...
可以很明顯看出該模式的特點,定義抽象父類(student)或介面而不決定它對應的是哪個具體物件,由子類(physicsstudent/englishstudent/softwarestudent)去決定。
事實上我們只用到了乙個工廠類,沒有必要將它作為物件例項化。省去了抽象工廠類,直接通過具體類裡面的乙個靜態方法負責生產產品類。因此也叫靜態工廠方法。
public
class staticcollege catch (instantiationexception | illegalacces***ception
| classnotfoundexception e)
return (t)student;
}}
public
class main
}
輸出:
my major is physics...
my major is english...
my major is software...
執行結果相同,但省略了抽象類及例項化具體工廠類的**,直接通過類的靜態方法例項化產品。
缺點的話是拓展性差,無法增加新的工廠生產新產品。
設計模式(二)工廠方法 例項工廠
抽象產品類 public abstract class bmw具體產品類 public class bmw320 extends bmw public class bmw523 extends bmw 抽象工廠類 public inte ce factory具體工廠類 public class bm...
設計模式學習 工廠方法模式
工廠方法模式,定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,工廠方法使乙個類的例項化延遲到了其子類。之前的簡單工廠模式雖說也非常好,但是在新增和更改生產選項的時候,不得不更改switch和case語句,這點違背了設計模式的開方 封閉的原則。工廠方法模式,既克服了簡單工廠違背開方 封閉原則的缺...
學習設計模式 工廠方法模式
說明 工廠方法跟簡單工廠的區別在於簡單工廠方法在構造的時候,通過判斷輸入引數,例項化不同車物件,而工廠方法新增不同車的工廠,客戶端在呼叫的時候控制例項化哪個車工廠。需求 跟簡單工廠模式一樣,要開不同的車 解決方式 a.乙個開車父類,定義乙個開車方法 b.分別定義子類開奧迪車 開賓士車 開寶馬車 繼承...