এক,কাঠামোগত প্যাটার্ন
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
অনুবাদকের টীকা:অনেক বিষয়েই বিতর্ক থাকতে পারে, এটি কোনো নির্দিষ্ট প্যাটার্ন কি না তা আসলে বিশেষ গুরুত্বপূর্ণ নয়, গুরুত্বপূর্ণ হলো তাদের নকশা আমাদের কোড উন্নত করার জন্য কিছু অভিজ্ঞতা দিতে পারে