JDK 源碼 閱讀 - 2 - 設計模式 - 創建型模式

A.創建型模式

  1. 抽象工廠(Abstract Factory)

    javax.xml.parsers.DocumentBuilderFactory

  wKiom1Wjy1-R1kHUAADm1diI0RY705.jpg

DocumentBuilderFactory通過FactoryFinder實例化具體的Factory.


使用例子:
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc = docBuilder.parse (new File("xxx.xml"));


  javax.xml.transform.TransformerFactory

wKiom1WlGZmgxa6gAAE7aRCpl9c233.jpg

 使用例子:
 StreamSource source = new StreamSource(...);
 StreamSource stylesource = new StreamSource(...);

 TransformerFactory factory = TransformerFactory.newInstance();
 Transformer transformer = factory.newTransformer(stylesource);

 StreamResult result = new StreamResult(System.out);
 transformer.transform(source, result)

   

  javax.xml.xpath.XPathFactory

   The structure is almost the same as the previous two.

XPathFactory xpathFactory = XPathFactory.newInstance();
XPath xpath = xpathFactory.newXPath();
XPathExpression expr = xpath.compile(XPATH_EXPRESSION_STRING);
Object result = expr.evaluate(Object item, QName returnType);

 


2.生成器模式(Builder)

 java.lang.Appendable

 java.lang.StringBuilder#append()

 java.lang.StringBuffer#append() 

wKiom1WmZcWRsuYhAADz5E0mWPM594.jpg

這裏我們看到狀態的轉換操作都會返回原來的類型的對象,這樣就可以構建生成鏈。


 java.nio.ByteBuffer#put() (CharBuffer, ShortBuffer, IntBuffer, LongBuffer, FloatBuffer 還有 DoubleBuffer)

參見上例。


3.工廠方法(Factory method) 

 java.util.Calendar#getInstance()

wKioL1Wma_ujElhuAADSTk71wnQ429.jpg

工廠方法的構造方法就在所要生成的類型上。 這個抽象工廠有很大不同。

其它的可參見:

 java.util.ResourceBundle#getBundle()

 java.text.NumberFormat#getInstance()

 java.nio.charset.Charset#forName()

 java.net.URLStreamHandlerFactory#createURLStreamHandler(String) 

4.原型模式(Prototye)


5.單例模式(Singleton) 

 java.lang.Runtime#getRuntime()

 java.awt.Desktop#getDesktop()




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章