<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Java 源碼里的設(shè)計模式

          共 3948字,需瀏覽 8分鐘

           ·

          2020-10-20 12:39

          Java 源碼里的設(shè)計模式

          從 維基百科 中,可以讓你對大部分設(shè)計模式有一個概覽,而且它也指出了哪些設(shè)計模式是 GoF 中規(guī)范.下面列出可以從 JavaSE 和 JavaEE API 中找到的設(shè)計模式:

          創(chuàng)建型模式

          抽象工廠

          • javax.xml.parsers.DocumentBuilderFactory#newInstance()
          • javax.xml.transform.TransformerFactory#newInstance()
          • javax.xml.xpath.XPathFactory#newInstance()

          建造者模式

          • java.lang.StringBuilder#append()(非同步)
          • java.lang.StringBuffer#append()(同步)
          • java.nio.ByteBuffer#put()(類似的還有, CharBuffer, ShortBuffer, IntBuffer, LongBuffer, FloatBuffer 和 DoubleBuffer)
          • javax.swing.GroupLayout.Group#addComponent()

          工廠模式

          • java.util.Calendar#getInstance()
          • java.util.ResourceBundle#getBundle()
          • java.text.NumberFormat#getInstance()
          • java.nio.charset.Charset#forName()
          • java.net.URLStreamHandlerFactory#createURLStreamHandler(String)

          原型模式

          • java.lang.Object#clone()(類需要實現(xiàn) java.lang.Cloneable 接口)

          單例模式

          • java.lang.Runtime#getRuntime()
          • java.awt.Desktop#getDesktop()
          • java.lang.System#getSecurityManager()

          結(jié)構(gòu)型模式

          適配器模式

          • java.util.Arrays#asList()
          • java.io.InputStreamReader(InputStream) (返回 Reader)
          • java.io.OutputStreamWriter(OutputStream)(返回 Writer)
          • javax.xml.bind.annotation.adapters.XmlAdapter#marshal() 和 #unmarshal()

          橋模式

          暫時沒有發(fā)現(xiàn)

          合成模式

          • java.awt.Container#add(Component)(Swing 中幾乎所有類都使用)
          • javax.faces.component.UIComponent#getChildren()(JSF UI 中幾乎所有類都使用)

          裝飾模式

          • java.io.InputStream, OutputStream, Reader 和 Writer 的所有子類都有一個使用 InputStream, OutputStream, Reader, Writer 的構(gòu)造器
          • java.util.Collections 中的 checkedXXX(), synchronizedXXX() 和 unmodifiableXXX() 方法
          • javax.servlet.http.HttpServletRequestWrapper 和 HttpServletResponseWrapper

          門面模式

          javax.faces.context.FacesContext,其內(nèi)部使用了 LifeCycle, ViewHandler, NavigationHandler 等接口或抽象類,沒有這一個門面類,終端就需要考慮如何去使用接口或抽象類(實際上不需要,因為門面類通過反射完成了)javax.faces.context.ExternalContext, 其內(nèi)部使用了 ServletContext, HttpSession, HttpServletRequest, HttpServletResponse 等

          享元模式

          • java.lang.Integer#valueOf(int),類似得還有 Boolean, Byte, Character, Short 和 Long

          代理模式

          • java.lang.reflect.Proxy
          • java.rmi.*(所有 api)

          表現(xiàn)型模式

          責(zé)任鏈模式

          • java.util.logging.Logger#log()
          • javax.servlet.Filter#doFilter()

          命令模式

          • 所有 java.lang.Runnable 的實現(xiàn)
          • 所有 javax.swing.Action 的實現(xiàn)

          解釋器模式

          • java.util.Pattern
          • java.text.Normalizer
          • 所有 java.text.Format 的子類
          • 所有 javax.el.ELResolver 的子類

          迭代模式

          • 所有 java.util.Iterator 的實現(xiàn)(因此也包含了所有 java.util.Scanner 的子類)
          • 所有 java.util.Enumeration 的實現(xiàn)

          中介模式

          • java.util.Timer 中的所有 scheduleXXX() 方法)
          • java.util.concurrent.Executor#execute()
          • java.util.concurrent.ExecutorService 中的 invokeXXX() 和 submit() 方法
          • java.util.concurrent.ScheduledExecutorService 中的所有 scheduleXXX() 方法
          • java.lang.reflect.Method#invoke()

          備忘錄模式

          java.util.Date(setXXX 方法更新的就是其內(nèi)部的 Date 的值)java.io.Serializable 的所有實現(xiàn)javax.faces.component.StateHolder 的所有實現(xiàn)

          觀察者模式(訂閱模式)

          java.util.Observer/java.util.Observable(實際應(yīng)用中,很少會用到)java.util.EventListener 的所有實現(xiàn)(幾乎包含了所有 Swing 中使用到的類)javax.servlet.http.HttpSessionBindingListenerjavax.servlet.http.HttpSessionAttributeListenerjavax.faces.event.PhaseListener

          狀態(tài)模式

          javax.faces.lifecycle.LifeCycle#execute()(由FacesServlet控制,行為是依賴于當(dāng)前JSF生命周期階段(狀態(tài)))

          策略模式

          java.util.Comparator#compare(), 在 Collections#sort() 中會使用到.javax.servlet.http.HttpServlet,service() 和 所有 doXXX() 方法都以 HttpServletRequest 和 HttpServletResponse 作為參數(shù),所有方法的實現(xiàn)都需要顯式處理這兩個參數(shù)(而不是持有這個變量。)javax.servlet.Filter#doFilter()

          模板模式

          java.io.InputStream, java.io.OutputStream, java.io.Reader 和 java.io.Writer 的所有 非抽象 方法。java.util.AbstractList, java.util.AbstractSet 和 java.util.AbstractMap 的所有 非抽象 方法。

          javax.servlet.http.HttpServlet 中 doXXX() 方法,這些方法默認返回 405 "Method Not Allowed" ,你可以自由地選擇覆蓋實現(xiàn)其中的一個或多個。

          訪問者模式

          javax.lang.model.element.AnnotationValue 和 AnnotationValueVisitorjavax.lang.model.element.Element 和 ElementVisitorjavax.lang.model.type.TypeMirror 和 TypeVisitorjava.nio.file.FileVisitor 和 SimpleFileVisitor

          附錄拓展:

          • 設(shè)計模式-百度百科

          • stackoverflow原址: http://stackoverflow.com/questions/1673841/examples-of-gof-design-patterns-in-javas-core-libraries

          長按關(guān)注,學(xué)習(xí)更多

          推薦閱讀

          瀏覽 48
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美做爰BBB性BBBBB8 | 欧美X X X欧美91 | 青草一区 | 狠狠无码 | 真的可以看 波多野结衣 一区 |