أولًا، الأنماط الهيكلية
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 (يوفر طبقة تجريد تربط دعم النوافذ بنظام التشغيل الأصلي.)
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
ملاحظة المترجم:قد تكون نقاط كثيرة موضع خلاف؛ وليس من المهم جدًا ما إذا كانت تمثل نمطًا معينًا، بل المهم أن تصميمها يمكن أن يقدم لنا خبرات تساعد على تحسين شيفرتنا