今天花了很多時間把工廠模式又整理了一下,發現以前都沒怎麼弄懂。。
工廠模式分為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 服務工作者 將導航功能從前端控制器中解...