設計模式例項學習 工廠方法

2021-07-07 06:09:35 字數 2012 閱讀 7975

(物件建立型模式)

定義乙個用於建立物件的介面,讓子類決定例項化那個類。工程方法使乙個類的例項化延遲到其子類。
大學裡面有很多不同的學院,不同的學院教育並輸出(生產出)不同專業的學生。現在有三個學院,分別是軟體專業,物理專業,英語專業。輸出每個學院的乙個學生。

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.分別定義子類開奧迪車 開賓士車 開寶馬車 繼承...