Java 核心库中的 GoF 设计模式示例
2022-08-31 04:08:07
						我正在学习GoF Java设计模式,我想看到一些现实生活中的例子。在Java的核心库中,这些设计模式有哪些很好的例子?
我正在学习GoF Java设计模式,我想看到一些现实生活中的例子。在Java的核心库中,这些设计模式有哪些很好的例子?
您可以在维基百科中找到许多设计模式的概述。它还提到了GoF提到的模式。我将在这里总结它们,并尝试分配尽可能多的模式实现,这些实现都可以在Java SE和Java EE API中找到。
javax.xml.parsers.DocumentBuilderFactory#newInstance()javax.xml.transform.TransformerFactory#newInstance()javax.xml.xpath.XPathFactory#newInstance()java.lang.StringBuilder#append() (unsynchronized)java.lang.StringBuffer#append() (synced)java.nio.ByteBuffer#put() (也用于 CharBuffer、ShortBuffer、IntBuffer、LongBuffer、FloatBuffer 和 DoubleBuffer))javax.swing.GroupLayout.Group#addComponent()java.lang.Appendable 的所有实现
java.util.stream.Stream.Builderjava.util.Calendar#getInstance()java.util.ResourceBundle#getBundle()java.text.NumberFormat#getInstance()java.nio.charset.Charset#forName()java.net.URLStreamHandlerFactory#createURLStreamHandler(String) (Returns singleton object per protocol)java.util.EnumSet#of()javax.xml.bind.JAXBContext#createMarshaller() 和其他类似的方法java.util.Arrays#asList()java.util.Collections#list()java.util.Collections#enumeration()java.io.InputStreamReader(InputStream) (返回Reader)java.io.OutputStreamWriter(OutputStream) (返回Writer)javax.xml.bind.annotation.adapters.XmlAdapter#marshal() 和 #unmarshal()
,java.util.Collections#newSetFromMap() 和 singletonXXX() 方法非常接近。new LinkedHashMap(LinkedHashSet<K>, List<V>)java.awt.Container#add(Component) (因此几乎遍布 Swing)javax.faces.component.UIComponent#getChildren() (因此几乎遍布 JSF UI)java.io.InputStream、OutputStream、Reader 和 Writer 的所有子类都有一个采用相同类型实例的构造函数。java.util.Collections、checkedXXX()、synchronizedXXX() 和 unmodifiableXXX() 方法。javax.servlet.http.HttpServletRequestWrapper 和 HttpServletResponseWrapper
javax.swing.JScrollPanejavax.faces.context.FacesContext,它在内部使用抽象/接口类型LifeCycle,ViewHandler,NavigationHandler等等,而最终用户不必担心它(但是可以通过注入来覆盖)。javax.faces.context.ExternalContext,内部使用ServletContext,HttpSession,HttpServletRequest,HttpServletResponse等。java.lang.reflect.Proxyjava.rmi.*javax.ejb.EJB (解释在这里)javax.inject.Inject (此处说明)javax.persistence.PersistenceContextjava.lang.Runnable 的所有实现
javax.swing.Action 的所有实现
java.util.Iterator 的所有实现(因此其中还有 java.util.Scanner!java.util.Enumeration 的所有实现
java.util.Timer (所有方法)scheduleXXX()java.util.concurrent.Executor#execute()java.util.concurrent.ExecutorService (and methods)invokeXXX()submit()java.util.concurrent.ScheduledExecutorService (所有方法)scheduleXXX()java.lang.reflect.Method#invoke()java.util.Date(setter方法就是这样做的,内部由一个值表示)Datelongjava.io.Serializable 的所有实现
javax.faces.component.StateHolder 的所有实现
java.util.Observer/java.util.Observable(虽然很少在现实世界中使用)java.util.EventListener 的所有实现(因此几乎遍布 Swing)javax.servlet.http.HttpSessionBindingListenerjavax.servlet.http.HttpSessionAttributeListenerjavax.faces.event.PhaseListenerjavax.faces.lifecycle.LifeCycle#execute() (由 FacesServlet 控制,行为取决于 JSF 生命周期的当前阶段(状态))java.util.Comparator#compare(),由等执行。Collections#sort()javax.servlet.http.HttpServlet,和所有方法都采用和实现者必须处理它们(而不是将它们作为实例变量来获取!service()doXXX()HttpServletRequestHttpServletResponsejavax.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,默认情况下,所有方法都会向响应发送 HTTP 405“方法不允许”错误。您可以自由地实现任何或其中任何一个。doXXX()ObservableObserver)ContainerAdapterComponentAdapterFocusAdapterKeyAdapterMouseAdapterBufferedInputStreamFilterInputStream)java.lang.Runtime#getRuntime()是辛格尔顿ButtonGroup对于中介模式Action,可用于不同的可视表示来执行相同的代码 -> 命令模式AbstractAction还有更多我想