標籤:jdk 源碼 設計模式
A.建立型模式
抽象工廠(Abstract Factory)
javax.xml.parsers.DocumentBuilderFactory
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6F/A6/wKiom1Wjy1-R1kHUAADm1diI0RY705.jpg" title="AbstractFactory DocumentBuilderFactory.jpg" alt="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
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6F/B1/wKiom1WlGZmgxa6gAAE7aRCpl9c233.jpg" title="TransformerFactory.jpg" alt="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()
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6F/BB/wKiom1WmZcWRsuYhAADz5E0mWPM594.jpg" title="StringBuilder.jpg" alt="wKiom1WmZcWRsuYhAADz5E0mWPM594.jpg" />
這裡我們看到狀態的轉換操作都會返回原來的類型的對象,這樣就可以構建產生鏈。
java.nio.ByteBuffer#put() (CharBuffer, ShortBuffer, IntBuffer, LongBuffer, FloatBuffer 還有 DoubleBuffer)
參見上例。
3.Factory 方法(Factory method)
java.util.Calendar#getInstance()
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6F/B8/wKioL1Wma_ujElhuAADSTk71wnQ429.jpg" title="Calendar-Factory Method.jpg" alt="wKioL1Wma_ujElhuAADSTk71wnQ429.jpg" />
Factory 方法的構造方法就在所要產生的類型上。 這個抽象工廠有很大不同。
其它的可參見:
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()
JDK 源碼 閱讀 - 2 - 設計模式 - 建立型模式