“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必重复劳动。”
----- Christopher Alexander
Alexander 是 20 世纪 70 年代的一位著名的建筑师 ,他为了解决同一个问题而设计出的不同版本的建筑结构,突然发现了这些高质量的设计中都具有着相似部分,然后他就把这些相似的部分提炼出来,总结成了一套经验,留着后续再设计时使用。
设计模式是在软件设计中经常出现的问题的解决方案,它们是经验丰富的开发人员通过时间和实践总结出来的最佳实践。
?说白一点
它就是一套经过前人踩坑之后,总结出来的一套被反反复复使用的解决方案,
也即,前人栽树,后人乘凉。
在 Java 中,我们有幸继承了许多经典的设计模式,其中最著名的是《设计模式:可复用面向对象软件的基础》一书中总结的 23 种设计模式。这些设计模式可以分为三大类:创建型模式、结构型模式和行为型模式,本文我们将简要概述一下这些设计模式。
java.lang.Runtime
、数据库连接池java.util.Calendar
、java.util.Collection
javax.xml.parsers.DocumentBuilderFactory
java.lang.StringBuilder
、java.lang.StringBuffer
java.lang.Object#clone()
java.util.Arrays#asList()
java.util.logging
java.awt.Container
、javax.swing.JComponent
java.io.InputStream
java.net.URL
、javax.faces.webapp.FacesServlet
java.lang.reflect.Proxy
、java.rmi.*
java.lang.Integer#valueOf(int)
、java.lang.String#intern()
java.util.Observer
、java.util.Observable
java.util.Comparator
、java.util.Arrays#sort()
java.lang.Runnable
、javax.swing.Action
java.util.Iterator
、javax.faces.lifecycle.Lifecycle
java.util.logging.Logger#log()
javax.lang.model.element.Element
、javax.lang.model.element.ElementVisitor
java.util.Timer
、java.util.concurrent.Executor
java.util.Date
java.util.Iterator
、java.util.Collection
java.util.AbstractList
、java.util.AbstractMap
java.util.regex.Pattern
、javax.el.ELResolver
这些设计模式提供了在特定情境中解决问题的通用方法,每种设计模式都有其适用的场景和优缺点。使用它们可以提高代码的可读性、可维护性和可扩展性。当我们对它们充分的掌握了,也可以自己去创造模式。最后,就像是倚天屠龙记中张无忌学习太极功似的,化有形于无形,无招胜有招(即所有模式变无模式)。