2.1 রাজ্য
রাষ্ট্র একটি আচরণগত নকশা প্যাটার্ন. এটি সেই ক্ষেত্রে ব্যবহৃত হয় যখন, প্রোগ্রামটি কার্যকর করার সময়, বস্তুটিকে তার অবস্থার উপর নির্ভর করে তার আচরণ পরিবর্তন করতে হবে।
![অবস্থা](https://cdn.codegym.cc/images/article/0b64173f-b514-4ae1-a073-6cbb386a5716/800.jpeg)
প্যাটার্নটি 3 টি ব্লক নিয়ে গঠিত:
প্রসঙ্গ হল এমন একটি শ্রেণী যার বস্তুর রাষ্ট্রের উপর নির্ভর করে তাদের আচরণ পরিবর্তন করা উচিত।
স্টেট হল ইন্টারফেস যা প্রতিটি কংক্রিট স্টেটকে অবশ্যই বাস্তবায়ন করতে হবে। এই ইন্টারফেসের মাধ্যমে, কনটেক্সট অবজেক্ট রাষ্ট্রের সাথে মেথড কল ডেলিগেটিং করে ইন্টারঅ্যাক্ট করে। ইন্টারফেসটিতে এমন বস্তুর প্রতিক্রিয়ার উপায় থাকা উচিত যার আচরণ পরিবর্তন করা হবে।
এই জন্য, একটি ইভেন্ট ব্যবহার করা হয় (প্যাটার্ন প্রকাশক - গ্রাহক)। ঘটনা ঘটলে প্রোগ্রামটি কার্যকর করার সময় রাষ্ট্রীয় বস্তু প্রতিস্থাপন করার জন্য এটি প্রয়োজনীয়। এমন কিছু ঘটনা থাকতে পারে যেখানে কনটেক্সট নিজেই পর্যায়ক্রমে রাষ্ট্রীয় বস্তুকে একটি পরিবর্তনের জন্য পোল করে।
ConcreteState1, ConcreteState2 - কংক্রিট স্টেটের ক্লাস। কোন অবস্থার অধীনে এবং কোন অবস্থায় বস্তুটি বর্তমান অবস্থা থেকে পাস করতে পারে সে সম্পর্কে তথ্য থাকা উচিত। উদাহরণস্বরূপ, ConcreteState1 থেকে, একটি বস্তু ConcreteState2 এবং ConcreteState3-এ যেতে পারে এবং ConcreteState2 থেকে ConcreteState1-এ যেতে পারে এবং আরও অনেক কিছু। তাদের মধ্যে একটির অবজেক্ট তৈরি করার সময় অবশ্যই কনটেক্সট থাকতে হবে।
উদাহরণস্বরূপ, আপনি একটি গেম লিখছেন যেখানে একটি চরিত্র দৌড়াতে, সাঁতার কাটতে এবং উড়তে পারে। যদি আপনার চরিত্রটি জলে পড়ে যায়, তবে জলে তার আচরণ সীমাবদ্ধ করা যুক্তিসঙ্গত: এখন সে গুলি করতে পারে না, তবে তার এখনও কিছু ক্রিয়া রয়েছে: সামনে, ডান, বাম, ইত্যাদি সাঁতার কাটা।
আপনার চরিত্রের অবস্থা একটি স্টেট অবজেক্ট দ্বারা বর্ণনা করা যেতে পারে, যেখানে এমন পদ্ধতি রয়েছে যা বলা যেতে পারে এবং এটি কিছু করবে। এবং আপনার চরিত্রটি জলে যাওয়ার পরে, আপনি কেবল এটির ভিতরের অন্য রাষ্ট্রীয় বস্তুর রেফারেন্স পরিবর্তন করেন - এবং এটি তার অবস্থা পরিবর্তন করে।
2.2 কৌশল
কৌশল হল অ্যালগরিদমগুলির একটি পরিবারকে সংজ্ঞায়িত করার জন্য, প্রতিটিকে এনক্যাপসুলেট করার এবং তাদের বিনিময়যোগ্য করার জন্য একটি আচরণগত নকশা প্যাটার্ন। এটি আপনাকে উপযুক্ত ক্লাস সংজ্ঞায়িত করে একটি অ্যালগরিদম বেছে নিতে দেয়।
স্ট্র্যাটেজি প্যাটার্ন আপনাকে নির্বাচিত অ্যালগরিদম পরিবর্তন করার অনুমতি দেয় নির্বিশেষে ক্লায়েন্ট অবজেক্ট যা এটি ব্যবহার করে।
![কৌশল](https://cdn.codegym.cc/images/article/673c4c44-ec33-4d4e-860f-399abc388d8d/800.jpeg)
কৌশল প্যাটার্ন আপনাকে প্রেক্ষাপটের উপর নির্ভর করে বিভিন্ন ব্যবসার নিয়ম বা অ্যালগরিদম ব্যবহার করতে দেয়। এটি এমন ক্ষেত্রে ব্যবহৃত হয় যেখানে সিস্টেমের বর্তমান অবস্থার (বা এর পরিবেশ) উপর নির্ভর করে একই জায়গায় বিভিন্ন অ্যালগরিদম ব্যবহার করতে হবে।
শক্তি:
- বিভিন্ন অ্যালগরিদম বাস্তবায়নের এনক্যাপসুলেশন, সিস্টেমটি ব্যবসায়িক নিয়মের সম্ভাব্য পরিবর্তন থেকে স্বাধীন হয়ে যায়;
- সমস্ত অ্যালগরিদমকে একটি আদর্শ উপায়ে কল করা;
- সুইচ এবং/অথবা শর্তসাপেক্ষ বিবৃতি ব্যবহার না করা।
এই প্যাটার্নটি কিছুটা রাষ্ট্রীয় প্যাটার্নের মতো, তবে এখানে জোর দেওয়া হয়েছে রাষ্ট্রের উপর নয়, আচরণের উপর। ধরা যাক আপনার গেমের একটি চরিত্র অস্ত্র পরিবর্তন করতে পারে। তারপরে অস্ত্র পরিবর্তন করার সময়, আপনি কেবল বস্তুটির রেফারেন্স পরিবর্তন করতে পারেন যা বর্ণনা করে যে এই অস্ত্রটি কীভাবে কাজ করে।
2.3 টেমপ্লেট পদ্ধতি
![টেমপ্লেট পদ্ধতি](https://cdn.codegym.cc/images/article/be4df3de-e667-4f4d-9ea7-d3b021879bb2/800.jpeg)
অ্যাবস্ট্রাক্ট ক্লাস (বিমূর্ত শ্রেণী) - অ্যালগরিদমের পদক্ষেপগুলি বাস্তবায়নের জন্য উত্তরাধিকারীতে প্রতিস্থাপিত বিমূর্ত ক্রিয়াকলাপগুলিকে সংজ্ঞায়িত করে; একটি টেমপ্লেট পদ্ধতি প্রয়োগ করে যা অ্যালগরিদমের কঙ্কালকে সংজ্ঞায়িত করে। টেমপ্লেট পদ্ধতিটি বিমূর্ত শ্রেণিতে সংজ্ঞায়িত প্রতিস্থাপিত এবং অন্যান্য ক্রিয়াকলাপগুলিকে কল করে।
কংক্রিট ক্লাস (কংক্রিট ক্লাস) - প্রতিস্থাপিত ক্রিয়াকলাপগুলি বাস্তবায়নের জন্য প্রয়োজনীয় উপায়ে প্রয়োগ করে। কংক্রিট ক্লাস অনুমান করে যে অ্যালগরিদমের অপরিবর্তনীয় পদক্ষেপগুলি অ্যাবস্ট্রাক্টক্লাসে সঞ্চালিত হবে।
এই প্যাটার্নটি প্রায়শই যখন প্রয়োজন হয় তখন ব্যবহার করা হয়:
- অ্যালগরিদমের অপরিবর্তনীয় অংশের একক ব্যবহার, পরিবর্তিত অংশটি উত্তরাধিকারীদের বিবেচনার উপর রেখে।
- নকল এড়াতে বিভিন্ন শ্রেণীর সাধারণ কোডের স্থানীয়করণ এবং বিচ্ছিন্নতা।
- উত্তরাধিকারীদের শুধুমাত্র নির্দিষ্ট জায়গায় কোড প্রসারিত করার অনুমতি দিন।
হ্যাঁ, এই প্যাটার্নটি একটি জোড়ার ব্যবহার বর্ণনা করে: একটি বিমূর্ত শ্রেণী এবং এর বাস্তবায়ন।
2.4 দায়িত্বের চেইন
দায়িত্বের চেইন হল একটি আচরণগত নকশা প্যাটার্ন যা একটি সিস্টেমে দায়িত্বের স্তরগুলিকে সংগঠিত করার জন্য ডিজাইন করা হয়েছে।
![দায়িত্বের চেইন](https://cdn.codegym.cc/images/article/41b55822-dc67-4db3-a0e8-b467bc9f320d/800.jpeg)
টেমপ্লেটটি এমন পরিস্থিতিতে ব্যবহারের জন্য সুপারিশ করা হয় যেখানে:
- উন্নত সিস্টেমে বস্তুর একটি গ্রুপ রয়েছে যা একটি নির্দিষ্ট ধরণের বার্তা প্রক্রিয়া করতে পারে;
- সমস্ত বার্তা অন্তত একটি সিস্টেম অবজেক্ট দ্বারা প্রক্রিয়া করা আবশ্যক;
- সিস্টেমের বার্তাগুলি "এটি নিজে প্রক্রিয়া করুন বা এটিকে অন্যের কাছে প্রেরণ করুন" স্কিম অনুসারে প্রক্রিয়া করা হয়, অর্থাৎ, কিছু বার্তাগুলি যে স্তরে প্রাপ্ত হয়েছিল সেখানে প্রক্রিয়া করা হয়, যখন অন্যগুলি অন্য স্তরের বস্তুগুলিতে ফরোয়ার্ড করা হয়।
2.5 স্মৃতিচিহ্ন
কিপার (মেমেন্টো) হল একটি আচরণগত নকশা প্যাটার্ন যা আপনাকে এনক্যাপসুলেশন লঙ্ঘন না করে একটি বস্তুর অভ্যন্তরীণ অবস্থা ঠিক করতে এবং সংরক্ষণ করতে দেয় যাতে এটি পরে এই অবস্থায় পুনরুদ্ধার করা যায়।
![অভিভাবক (স্মরণার্থী)](https://cdn.codegym.cc/images/article/9b1d2d68-74b7-427c-8d7b-cf44640cf51f/800.jpeg)
গার্ডিয়ান প্যাটার্ন ব্যবহার করা হয় যখন:
- পরবর্তী পুনরুদ্ধারের জন্য বস্তুর অবস্থা (বা এর অংশ) একটি স্ন্যাপশট সংরক্ষণ করা প্রয়োজন;
- একটি বস্তুর অবস্থা পাওয়ার জন্য সরাসরি ইন্টারফেস বাস্তবায়নের বিশদ প্রকাশ করে এবং অবজেক্ট এনক্যাপসুলেশন ভেঙে দেয়।
GO TO FULL VERSION