(物件建立型模式)
定義乙個用於建立物件的介面,讓子類決定例項化那個類。工程方法使乙個類的例項化延遲到其子類。
大學裡面有很多不同的學院,不同的學院教育並輸出(生產出)不同專業的學生。現在有三個學院,分別是軟體專業,物理專業,英語專業。輸出每個學院的乙個學生。
public
abstract
class
student
//專業不同,由子類去實現。
public
abstract
void
mymajor();
}
//英語專業學生
public
class
englishstudent
extends
student
}
//物理專業學生
public
class
physicsstudent
extends
student
}
//軟體專業學生
public
class
softwarestudent
extends
student
}
teachingstudent:負責生產學生物件。public
abstract
class
college
通過反正獲取類的名字,例項化生成對應的學生類物件public
class
scnucollege
extends
college catch (instantiationexception | illegalacces***ception
| classnotfoundexception e)
return (t)student;
}}
輸出:package factorymethod;
public
class main
}
可以很明顯看出該模式的特點,定義抽象父類(student)或介面而不決定它對應的是哪個具體物件,由子類(physicsstudent/englishstudent/softwarestudent)去決定。my major is physics...
my major is english...
my major is software...
事實上我們只用到了乙個工廠類,沒有必要將它作為物件例項化。省去了抽象工廠類,直接通過具體類裡面的乙個靜態方法負責生產產品類。因此也叫靜態工廠方法。
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.分別定義子類開奧迪車 開賓士車 開寶馬車 繼承...