j2ee常用設計模式之工廠模式

2021-08-27 06:57:48 字數 4126 閱讀 4092

今天花了很多時間把工廠模式又整理了一下,發現以前都沒怎麼弄懂。。

工廠模式分為3種:簡單工廠模式,工廠方法模式和抽象工廠模式。

1.簡單工廠模式:

其實這個概念我還真沒怎麼看懂,難道是我的智商有問題?既然概念沒看懂就不說了,說說我知道的吧。

簡單工廠模式由三部分組成:工廠,抽象產品,具體產品。

剛才看見別人寫的乙個女媧造人的例子,一看就懂了,女媧就是工廠,腦海裡的人就是抽象產品,捏出來的人就是具體產品。

下面看個例子加深認識吧:

抽象產品:人

public inte***ce person
具體產品:學生

public class student implements person

public void eat()

public void sleep()

}

具體產品:老師

public class teacher implements person

public void eat()

public void sleep()

}

工廠:學校

public class school 

if(type.equals("teacher"))

return person;

}}

測試類:

public class test 

}

很顯然都知道結果是什麼。剛開始建立了學生物件,後面建立了老師物件。看上去好像很不錯,但其實也存在問題:如果我要加個具體校長類呢?那不是又要修改工廠方法嗎?下面就引出了工廠方法模式。

2.工廠方法模式:

工廠方法模式由四部分組成:抽象工廠,具體工廠,抽象產品,具體產品。

下面看看對上面的例子進行改進,在不修改工廠方法的基礎上加個校長:

抽象產品中人類,學生類,老師類我就不寫了,再加個校長類:

抽象產品:校長

public class principal implements person

public void eat()

public void sleep()

}

和簡單工廠模式不同

抽象工廠:

public inte***ce school
具體工廠:生產學生

public class school_student implements school

}

具體工廠:生產老師

public class school_teacher implements school

}

具體方法:生產校長

public class school_principal implements school

}

測試類:

public class test 

}

由上面的例子我們發現,將工廠抽象,然後我們需要什麼樣的人,就實現生產什麼人的什麼工廠,然後由工廠生產具體的人,是不是一下子就很清晰了,如果還要加輔導員,只要建立乙個輔導員類實現person類,然後建立生產輔導員的學校例項化school,根本不用改其他的類。如果我們接觸的不是乙個產品,而是一簇多類甚至幾簇產品呢,這又怎麼辦?這就引入了抽象工廠模式。

3.抽象工廠模式:

下面介紹一簇多類的例子,通過例子可能會更容易弄明白

抽象產品:學生

public inte***ce student
具體產品:a級本科生

public class undergraduatea implements student

public void rest()

}

具體產品:b級本科生

public class undergraduateb implements student

public void rest()

}

具體產品:a級研究生

public class graduatea implements student

public void rest()

}

具體產品:b級研究生

public class graduateb implements student

public void rest()

}

抽象工廠:學校

public inte***ce school
具體工廠:生產a級學生的學校

public class school_a implements school

public student getgraduate()

}

具體工廠:生產b級學生的學校

public class school_b implements school

public student getgraduate()

}

測試類:

public class test 

}

這裡是一簇多類,所以只要乙個抽象產品多個抽象工廠,一簇產品那就學生,但是有幾類,a級和b級,然後就有乙個抽象的工廠來生產他們,當我們要a級學生的時候就用乙個a級學校實現這個工廠,需要本科生就生產本科生要研究生就生產研究生,要b級的也是一樣,如果以後還要乙個c級的,那麼只要用c級學生實現student,用c級學校實現school,就可以了,完全不用改動原來的**。是不是很爽啊!

下面再來看看多簇的例子。這裡就以兩簇為例吧:

抽象產品:衣服

public inte***ce clothes
抽象產品:褲子

public inte***ce trousers
具體產品:白色衣服

public class clothes_white implements clothes

public void getsize()

}

具體產品:黑色衣服

public class clothes_black implements clothes

public void getsize()

}

具體產品:白色褲子

public class trousers_white implements trousers

public void getlength()

}

具體產品:黑色褲子

public class trousers_black implements trousers

public void getlength()

}

抽象工廠:服裝廠

public inte***ce clothing
具體工廠:白色服裝廠

public class clothing_white implements clothing

public trousers createtrousers()

}

具體工廠:黑色服裝廠

public class clothing_black implements clothing

public trousers createtrousers()

}

測試類:

public class test 

}

這裡是兩簇的例子,如果是n簇m類,那麼就要n個抽象產品,m個抽象工廠,這一點應該能注意到,以上就是工廠模式我目前接觸到的全部內容,正在學習中。。。還是沒有睡意。。。。。。。。

J2EE常用設計模式 工廠模式

軟體設計的一般原則 1.開閉原則 對擴充套件開放,對修改關閉 2.黎克特制代換原則 在任何基類出現的地方,子類一定可以出現 3.依賴倒轉原則 依賴於抽象,不依賴於實現 4.介面隔離原則 應當為客戶提供盡可能小的單獨的介面而不是大的總介面 5.組合,聚合復用原則 盡量使用組合聚合而不是使用繼承達到 復...

J2EE設計模式分析與實踐 引言

簡單地說,模式是乙個出現在世界上的實物,同時也是一條規則,告訴你應該如何建立乙個實物 應該在何時建立。它既是過程,也是實物 既是對當前實物的描述,也是對建立實物的過程的描述。建築的永恆之道 在軟體科學中,隨著理論的發展,模式被細分為好多種,有軟體的管理模式,實踐證明與傳統管理是有區別的,從而是一種新...

J2EE設計模式讀書筆記(1) 表現層模式

表現層模式 裝飾器 動態新增功能到前端控制器,filter 前端控制器 建立乙個統一的集中的元件來執行公共的功能 截獲所有請求,struts mvc 將表達層分解為自包含的可重用的幾個部分,struts 復合檢視 根據幾個可重用的子檢視建立乙個試圖,tiles 服務工作者 將導航功能從前端控制器中解...