目录
创作模式
抽象工厂模式
通过创造性的方法来识别工厂本身,这又可以用于创建另一个抽象/接口类型
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.lang.Appendable
mybatis的SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder
工厂模式
可通过创建方法识别返回抽象/接口类型的实现
java.util.Calendar#getInstance()
java.util.ResourceBundle#getBundle()
java.text.NumberFormat#getInstance()
java.nio.charset.Charset#forName()
java.net.URLStreamHandlerFactory#createURLStreamHandler(String) (每个协议返回单例对象)
java.util.EnumSet#of()
javax.xml.bind.JAXBContext#createMarshaller() 和其他类似的方法
mybatis的SqlSessionFactory、ObjectFactory、MapperProxyFactory
Spring的BeanFactory和FactoryBean
原型模式
通过创建方法识别,返回具有相同属性的其他实例
java.lang.Object#clone()(必须实施java.lang.Cloneable)
单例模式
通过创造性方法识别,每次返回相同的实例(通常是自己)
java.lang.Runtime#getRuntime()
java.awt.Desktop#getDesktop()
java.lang.System#getSecurityManager()
mybatis的ErrorContext和LogFactory
Spring依赖注入Bean实例默认是单例的
结构模式
适配器模式
可通过创建方法识别采用不同抽象/接口类型的实例,并返回自己/另一个抽象/接口类型的实现,其装饰/覆盖给定实例
java.util.Arrays#asList()
java.util.Collections#list()
java.util.Collections#enumeration()
java.io.InputStreamReader(InputStream)(返回a Reader)
java.io.OutputStreamWriter(OutputStream)(返回a Writer)