एक,संरचनात्मक पैटर्न
1,एडाप्टर पैटर्न
एक इंटरफ़ेस को दूसरे इंटरफ़ेस में बदलने के लिए
java.util.Arrays#asList()
javax.swing.JTable(TableModel)
java.io.InputStreamReader(InputStream)
java.io.OutputStreamWriter(OutputStream)
javax.xml.bind.annotation.adapters.XmlAdapter#marshal()
javax.xml.bind.annotation.adapters.XmlAdapter#unmarshal()
2,ब्रिज पैटर्न
यह पैटर्न अमूर्तन को उसके ऑपरेशनों के कार्यान्वयन से अलग करता है, जिससे अमूर्तन और कार्यान्वयन स्वतंत्र रूप से बदल सकते हैं
AWT (यह एक अमूर्तन परत प्रदान करता है जो विंडो संबंधी सहायता को मूल OS से मैप करती है।)
JDBC
3,कम्पोज़िट पैटर्न
इससे क्लाइंट की दृष्टि में एकल ऑब्जेक्ट और ऑब्जेक्टों का संयोजन समान हो जाते हैं। दूसरे शब्दों में, किसी प्रकार की विधि अपने ही प्रकार को पैरामीटर के रूप में भी स्वीकार करती है
javax.swing.JComponent#add(Component)
java.awt.Container#add(Component)
java.util.Map#putAll(Map)
java.util.List#addAll(Collection)
java.util.Set#addAll(Collection)
4,डेकोरेटर पैटर्न
किसी ऑब्जेक्ट में गतिशील रूप से अतिरिक्त कार्यक्षमता जोड़ना,यह सबक्लास बनाने का एक विकल्प भी है।आप देख सकते हैं कि किसी प्रकार का ऑब्जेक्ट बनाते समय,उसी प्रकार का एक ऑब्जेक्ट भी पास किया जाता है।JDK में यह हर जगह दिखाई देता है,आप पाएँगे कि यह सर्वत्र मौजूद है,इसलिए नीचे दी गई सूची इसका केवल एक छोटा हिस्सा है
java.io.BufferedInputStream(InputStream)
java.io.DataInputStream(InputStream)
java.io.BufferedOutputStream(OutputStream)
java.util.zip.ZipOutputStream(OutputStream)
java.util.Collections#checked<list |sortedmap |sortedset |set |map>
5,फ़साड पैटर्न
घटकों,इंटरफ़ेसों,अमूर्त संरचनाओं या उपप्रणालियों के एक समूह के लिए एक सरल इंटरफ़ेस प्रदान करना
java.lang.Class
javax.faces.webapp.FacesServlet
6,फ़्लाईवेट पैटर्न
बड़ी संख्या में छोटी वस्तुओं तक पहुँच का समय घटाने के लिए कैश का उपयोग करना
java.lang.Integer#valueOf(int)
java.lang.Boolean#valueOf(boolean)
java.lang.Byte#valueOf(byte)
java.lang.Character#valueOf(char)
7,प्रॉक्सी पैटर्न
प्रॉक्सी पैटर्न में किसी जटिल वस्तु या ऐसी वस्तु,जिसे बनाने में समय लगता हो,की जगह एक सरल वस्तु का उपयोग किया जाता है。
java.lang.reflect.Proxy
RMI

दो, सृजन संबंधी पैटर्न
1,ऐब्स्ट्रैक्ट फ़ैक्टरी पैटर्न
एब्स्ट्रैक्ट फ़ैक्टरी पैटर्न ठोस ऑब्जेक्ट के प्रकार बताए बिना संबंधित या स्वतंत्र ऑब्जेक्टों की एक श्रृंखला बनाने का प्रोटोकॉल देता है। यह अनुप्रयोग को उसके इस्तेमाल किए गए फ़्रेमवर्क के ठोस कार्यान्वयन से अलग करता है। JDK और Spring जैसे अनेक फ़्रेमवर्क में यह व्यापक रूप से मिलता है। इसे पहचानना भी आसान है: जब नया ऑब्जेक्ट बनाने वाली विधि इंटरफ़ेस या एब्स्ट्रैक्ट क्लास लौटाती है, तो वह एब्स्ट्रैक्ट फ़ैक्टरी पैटर्न है
java.util.Calendar#getInstance()
java.util.Arrays#asList()
java.util.ResourceBundle#getBundle()
java.sql.DriverManager#getConnection()
java.sql.Connection#createStatement()
java.sql.Statement#executeQuery()
java.text.NumberFormat#getInstance()
javax.xml.transform.TransformerFactory#newInstance()
2,बिल्डर पैटर्न(Builder)
जटिल ऑब्जेक्ट बनाना सरल करने के लिए एक नई क्लास परिभाषित की जाती है जो दूसरी क्लास के इंस्टेंस बनाती है। बिल्डर पैटर्न भी आम तौर पर मेथड चेनिंग का उपयोग करके लागू किया जाता है
java.lang.StringBuilder#append()
java.lang.StringBuffer#append()
java.sql.PreparedStatement
javax.swing.GroupLayout.Group#addComponent()
3,फ़ैक्टरी मेथड
यह एक ऐसी विधि है जो कोई ठोस ऑब्जेक्ट लौटाती है
java.lang.Proxy#newProxyInstance()
java.lang.Object#toString()
java.lang.Class#newInstance()
java.lang.reflect.Array#newInstance()
java.lang.reflect.Constructor#newInstance()
java.lang.Boolean#valueOf(String)
java.lang.Class#forName()
4,प्रोटोटाइप पैटर्न
जिससे किसी क्लास के इंस्टेंस अपनी प्रतिलिपि बना सकते हैं। यदि किसी ऑब्जेक्ट का इंस्टेंस बनाना बहुत जटिल और समय लेने वाला हो, तो इस पैटर्न का उपयोग किया जा सकता है। नया इंस्टेंस दोबारा बनाने के बजाय, आप किसी ऑब्जेक्ट की प्रतिलिपि बनाकर सीधे उसमें बदलाव कर सकते हैं
java.lang.Object#clone()
java.lang.Cloneable
5,सिंगलटन पैटर्न
यह सुनिश्चित करने के लिए कि किसी क्लास का केवल एक इंस्टेंस हो। Joshua Bloch ने Effetive Java में एक और तरीका सुझाया है, वह है एनम का उपयोग
java.lang.Runtime#getRuntime()
java.awt.Toolkit#getDefaultToolkit()
java.awt.GraphicsEnvironment#getLocalGraphicsEnvironment()
java.awt.Desktop#getDesktop()
तीन,व्यवहार संबंधी पैटर्न
1,उत्तरदायित्व शृंखला पैटर्न
अनुरोध को एक ऑब्जेक्ट से श्रृंखला के अगले ऑब्जेक्ट तक तब तक भेजकर, जब तक उसका प्रसंस्करण पूरा न हो जाए, ऑब्जेक्टों के बीच निर्भरता कम की जाती है
java.util.logging.Logger#log()
javax.servlet.Filter#doFilter()
2,कमांड पैटर्न
कार्रवाई को ऑब्जेक्ट के भीतर समाहित करें, ताकि उसे संग्रहित, प्रेषित और वापस किया जा सके
java.lang.Runnable
javax.swing.Action
3,इंटरप्रेटर पैटर्न
यह पैटर्न आम तौर पर किसी भाषा का व्याकरण परिभाषित करता है, फिर उस व्याकरण के अनुरूप कथनों को पार्स करता है
java.util.Pattern
java.text.Normalizer
java.text.Format
4,इटरेटर पैटर्न
संग्रह की अंतर्निहित विशिष्ट संरचना से स्वतंत्र होकर, उसमें मौजूद वस्तुओं तक क्रमवार पहुँचने का एक समान तरीका प्रदान करना
java.util.Iterator
java.util.Enumeration
5,मध्यस्थ पैटर्न
संदेश वितरण और कक्षाओं के बीच प्रत्यक्ष निर्भरता कम करने के लिए एक मध्यस्थ ऑब्जेक्ट का उपयोग करना
java.util.Timer
java.util.concurrent.Executor#execute()
java.util.concurrent.ExecutorService#submit()
java.lang.reflect.Method#invoke()
6,मेमेंटो पैटर्न
ऑब्जेक्ट की अवस्था का स्नैपशॉट बनाएँ, ताकि वह अपनी आंतरिक सामग्री उजागर किए बिना मूल अवस्था में लौट सके। Date ऑब्जेक्ट अपने भीतर मौजूद एक long मान के माध्यम से मेमेंटो पैटर्न लागू करता है
java.util.Date
java.io.Serializable
7,नल ऑब्जेक्ट पैटर्न
यह पैटर्न किसी ऑब्जेक्ट के न होने की स्थिति को दर्शाने के लिए एक निष्प्रभावी ऑब्जेक्ट का उपयोग करता है। इससे आपको नल ऑब्जेक्ट के लिए अलग से प्रबंधन नहीं करना पड़ता
java.util.Collections#emptyList()
java.util.Collections#emptyMap()
java.util.Collections#emptySet()
8,ऑब्ज़र्वर पैटर्न
यह किसी ऑब्जेक्ट को रुचि रखने वाले ऑब्जेक्टों तक लचीले ढंग से संदेश भेजने देता है
java.util.EventListener
javax.servlet.http.HttpSessionBindingListener
javax.servlet.http.HttpSessionAttributeListener
javax.faces.event.PhaseListener
9,स्टेट पैटर्न
वस्तु की आंतरिक अवस्था बदलकर आप रनटाइम पर उसके व्यवहार को गतिशील रूप से बदल सकते हैं
java.util.Iterator
javax.faces.lifecycle.LifeCycle#execute()
10,रणनीति पैटर्न
इस पैटर्न से एल्गोरिदम के एक समूह को ऑब्जेक्टों की एक शृंखला में समेटें। इन ऑब्जेक्टों को पास करके प्रोग्राम की कार्यक्षमता लचीले ढंग से बदली जा सकती है
java.util.Comparator#compare()
javax.servlet.http.HttpServlet
javax.servlet.Filter#doFilter()
11,टेम्पलेट मेथड पैटर्न
उपवर्ग को पूरी विधि के बजाय उसके एक हिस्से को ओवरराइड करने दें; आप नियंत्रित कर सकते हैं कि उपवर्ग को किन क्रियाओं को ओवरराइड करना है
java.util.Collections#sort()
java.io.InputStream#skip()
java.io.InputStream#read()
java.util.AbstractList#indexOf()
12,विज़िटर पैटर्न
वस्तुओं के समूह पर क्रियाएँ करने का सुविधाजनक और आसानी से रखरखाव योग्य तरीका प्रदान करता है। इससे आप जिन वस्तुओं पर क्रिया कर रहे हैं, उन्हें बदले बिना उनके व्यवहार में बदलाव या विस्तार कर सकते हैं
javax.lang.model.element.Element और javax.lang.model.element.ElementVisitor
javax.lang.model.type.TypeMirror और javax.lang.model.type.TypeVisitor
अनुवादक की टिप्पणी:कई बिंदुओं पर विवाद हो सकता है। वे किसी विशेष पैटर्न के अंतर्गत आते हैं या नहीं, यह इतना महत्वपूर्ण नहीं है;महत्वपूर्ण यह है कि उनकी डिज़ाइन हमारे कोड को बेहतर बनाने के लिए कुछ सीख दे सकती है