কৌশল ডিজাইনের ধরণ এবং রাজ্য নকশার ধরণের মধ্যে পার্থক্য কী? আমি ওয়েবে বেশ কয়েকটি নিবন্ধ দিয়ে যাচ্ছিলাম তবে স্পষ্টভাবে পার্থক্যটি প্রকাশ করতে পারলাম না।
কেউ দয়া করে সাধারণ লোকের শর্তাবলী মধ্যে পার্থক্য ব্যাখ্যা করতে পারেন?
কৌশল ডিজাইনের ধরণ এবং রাজ্য নকশার ধরণের মধ্যে পার্থক্য কী? আমি ওয়েবে বেশ কয়েকটি নিবন্ধ দিয়ে যাচ্ছিলাম তবে স্পষ্টভাবে পার্থক্যটি প্রকাশ করতে পারলাম না।
কেউ দয়া করে সাধারণ লোকের শর্তাবলী মধ্যে পার্থক্য ব্যাখ্যা করতে পারেন?
উত্তর:
সত্যই, দুটি নিদর্শন অনুশীলনে বেশ সমান এবং আপনার মধ্যে জিজ্ঞাসার উপর নির্ভর করে তাদের মধ্যে নির্ধারিত পার্থক্য পরিবর্তিত হয়। কয়েকটি জনপ্রিয় পছন্দগুলি হ'ল:
একটি "ক্লাসিক" বাস্তবায়ন তালিকার প্রতিটি আইটেমের জন্য রাজ্য বা কৌশলগুলির সাথে মেলে তবে আপনি উভয় সংমিশ্রিত সংকর সংকেত জুড়ে চলে। কোনও নির্দিষ্ট একাধিক স্টেট-ওয়াই বা কৌশল-ওয়াই শেষ পর্যন্ত একটি বিষয়গত প্রশ্ন a
getStatus()
পদ্ধতি থাকতে পারে
যা বস্তুর অবস্থার উপর ভিত্তি করে বিভিন্ন স্ট্যাটাসগুলি ফেরত পাঠাবে, তবে প্রতিটি সম্ভাব্য অবস্থার জন্য অ্যাকাউন্টের জন্য পদ্ধতির কলকারীকে আলাদাভাবে কোডিং করতে হবে না।পার্থক্য কেবলমাত্র এগুলির মধ্যে রয়েছে যে তারা বিভিন্ন সমস্যার সমাধান করে:
এই বিভিন্ন লক্ষ্য অর্জনের জন্য নির্মাণগুলি যদিও একইরকম; উভয় নিদর্শন প্রতিনিধি সঙ্গে রচনা উদাহরণ।
তাদের সুবিধা সম্পর্কে কিছু পর্যবেক্ষণ:
রাজ্য প্যাটার্নটি ব্যবহার করে রাষ্ট্র-হোল্ডিং (প্রসঙ্গ) শ্রেণিটি কোন রাজ্য বা প্রকার এবং এটি কী রাজ্য বা প্রকার উপলব্ধ তা জ্ঞান থেকে মুক্তি পেয়েছে । এর অর্থ হল ক্লাসটি ওপেন-ক্লোজড ডিজাইনের নীতি (ওসিপি) মেনে চলে: শ্রেণিটি সেখানে / কী ধরণের রাজ্য / প্রকারের পরিবর্তনের জন্য বন্ধ রয়েছে তবে রাজ্যগুলি / প্রকারগুলি এক্সটেনশনের জন্য উন্মুক্ত।
কৌশল প্যাটার্ন ব্যবহার করে অ্যালগরিদম-ব্যবহার (প্রসঙ্গ) শ্রেণি একটি নির্দিষ্ট কাজ (- "আলগোরিদম") কীভাবে সম্পাদন করতে হবে তা থেকে জ্ঞান থেকে মুক্তি পেয়েছে । এই কেসটি ওসিসিটির আনুগত্যও তৈরি করে; এই কাজটি কীভাবে সম্পাদন করা যায় সে সম্পর্কে পরিবর্তনগুলির জন্য ক্লাসটি বন্ধ রয়েছে, তবে এই কার্যটি সমাধান করার জন্য ডিজাইনটি অন্যান্য অ্যালগরিদমের সংযোজনের পক্ষে খুব উন্মুক্ত।
এটি সম্ভবত প্রসঙ্গ শ্রেণীর একক দায়িত্ব নীতি (এসআরপি) মেনে চলাও উন্নত করে। আরও অ্যালগরিদম অন্যান্য শ্রেণীর দ্বারা পুনরায় ব্যবহারের জন্য সহজেই উপলব্ধ হয় becomes
কেউ দয়া করে সাধারণ ব্যক্তির শর্তাবলী ব্যাখ্যা করতে পারেন?
নকশার নিদর্শনগুলি আসলে "সাধারণ" ধারণা নয়, তবে আমি এটি যথাসম্ভব পরিষ্কার করার চেষ্টা করব। যে কোনও ডিজাইনের ধরণটি তিন মাত্রায় বিবেচনা করা যেতে পারে:
আসুন রাষ্ট্র এবং কৌশলটির তুলনা করি।
রাজ্য দুটি ক্ষেত্রে একটিতে ব্যবহৃত হয় [GoF book p। 306] :
- কোনও বস্তুর আচরণ তার রাজ্যের উপর নির্ভর করে এবং সেই রাষ্ট্রের উপর নির্ভর করে রান-টাইমে তার আচরণটি পরিবর্তন করতে হবে।
- অপারেশনের বড়, মাল্টিপার্ট কন্ডিশনাল স্টেটমেন্ট থাকে যা বস্তুর অবস্থার উপর নির্ভর করে। এই রাজ্যটি সাধারণত এক বা একাধিক গণিত স্থির প্রতিনিধিত্ব করে। প্রায়শই, বেশ কয়েকটি অপারেশনে এই একই শর্তাধীন কাঠামো থাকবে contain রাষ্ট্রীয় প্যাটার্ন শর্তাধীন প্রতিটি শাখা একটি পৃথক শ্রেণিতে রাখে। এটি আপনাকে অবজেক্টের অবস্থাটিকে তার নিজের মতো করে একটি বস্তুর মতো আচরণ করতে দেয় যা অন্য বস্তুর থেকে পৃথকভাবে পৃথক হতে পারে।
যদি আপনি নিশ্চিত করতে চান যে রাজ্যের প্যাটার্নটি সমাধান করে আপনার কাছে সত্যিই সমস্যা রয়েছে তবে আপনার সীমাবদ্ধ রাষ্ট্র মেশিন ব্যবহার করে অবজেক্টের রাজ্যগুলির মডেল করতে সক্ষম হওয়া উচিত । আপনি এখানে একটি প্রয়োগ উদাহরণ খুঁজে পেতে পারেন ।
প্রতিটি রাষ্ট্রের রূপান্তর রাষ্ট্র ইন্টারফেসের একটি পদ্ধতি। এটি বোঝায় যে কোনও ডিজাইনের জন্য, আপনি এই প্যাটার্নটি প্রয়োগ করার আগে আপনাকে রাষ্ট্রের স্থানান্তরণ সম্পর্কে বেশ কিছুটা নিশ্চিত থাকতে হবে। অন্যথায়, আপনি যদি রূপান্তরগুলি যুক্ত বা সরিয়ে থাকেন তবে এর জন্য ইন্টারফেস এবং এটি প্রয়োগকারী সমস্ত শ্রেণীর পরিবর্তন প্রয়োজন।
আমি ব্যক্তিগতভাবে এই প্যাটার্নটি দরকারী বলে খুঁজে পাইনি। আপনি সর্বদা সন্ধানের সারণী ব্যবহার করে সীমাবদ্ধ রাষ্ট্র মেশিনগুলি প্রয়োগ করতে পারেন (এটি কোনও ওও উপায় নয়, তবে এটি বেশ ভালভাবে কাজ করে)।
কৌশলগুলি নিম্নলিখিতগুলির জন্য ব্যবহৃত হয় [GoF book p। 316] :
- অনেক সম্পর্কিত ক্লাস কেবল তাদের আচরণে পৃথক হয়। কৌশলগুলি অনেকগুলি আচরণের মধ্যে একটি সহ কোনও শ্রেণি কনফিগার করার একটি উপায় সরবরাহ করে।
- আপনার একটি অ্যালগোরিদমের বিভিন্ন রূপ প্রয়োজন। উদাহরণস্বরূপ, আপনি বিভিন্ন স্থান / সময় বাণিজ্য-অফগুলি প্রতিফলিত করে অ্যালগোরিদম সংজ্ঞায়িত করতে পারেন। যখন এই রূপগুলি অ্যালগরিদম [HO87] এর শ্রেণীবদ্ধ শ্রেণিবদ্ধ হিসাবে প্রয়োগ করা হয় তখন কৌশলগুলি ব্যবহার করা যেতে পারে।
- একটি অ্যালগরিদম এমন ডেটা ব্যবহার করে যা ক্লায়েন্টদের সম্পর্কে জানা উচিত নয়। জটিল, অ্যালগোরিদম-নির্দিষ্ট ডেটা স্ট্রাকচারের সংস্পর্শ এড়াতে কৌশল প্যাটার্ন ব্যবহার করুন।
- একটি শ্রেণি অনেকগুলি আচরণের সংজ্ঞা দেয় এবং এগুলি এর ক্রিয়াকলাপগুলিতে একাধিক শর্তাধীন বিবৃতি হিসাবে উপস্থিত হয়। অনেক শর্তসাপেক্ষীর পরিবর্তে সম্পর্কিত শর্তাধীন শাখাগুলি তাদের নিজস্ব কৌশল শ্রেণিতে সরান।
কৌশলটি কোথায় প্রয়োগ করতে হবে তার সর্বশেষ কেসটি পলিমারফিজমের সাথে শর্তাধীন প্রতিস্থাপন নামে পরিচিত একটি রিফ্যাক্টরিংয়ের সাথে সম্পর্কিত ।
সংক্ষিপ্তসার: রাষ্ট্র ও কৌশল খুব আলাদা সমস্যা সমাধান করে। যদি আপনার সমস্যার সীমাবদ্ধ রাষ্ট্র মেশিনের সাহায্যে মডেল করা যায় না, তবে সম্ভবত স্টেট প্যাটার্নটি উপযুক্ত নয়। আপনার সমস্যাটি যদি কোনও জটিল অ্যালগরিদমের encapsulating রূপগুলির বিষয়ে না হয় তবে কৌশল প্রয়োগ হয় না।
রাজ্যের নিম্নলিখিত ইউএমএল শ্রেণি কাঠামো রয়েছে:
কৌশলটির নিম্নলিখিত ইউএমএল শ্রেণি কাঠামো রয়েছে:
সংক্ষিপ্তসার: স্থির কাঠামোর ক্ষেত্রে, এই দুটি নিদর্শন বেশিরভাগই অভিন্ন। বস্তুত, যেমন প্যাটার্ন-সনাক্ত সরঞ্জাম এই এক যে "বিবেচনা এর [...] নিদর্শন হয় অভিন্ন, একটি স্বয়ংক্রিয় প্রক্রিয়া দ্বারা তাদের পার্থক্য নিষিদ্ধ (যেমন, ধারণাগত তথ্য উল্লেখ ছাড়াই)। গঠন "
তবে একটি বড় পার্থক্য থাকতে পারে, যদি কংক্রিটস্টেটস তাদের নিজেরাই রাষ্ট্রীয় স্থানান্তরের সিদ্ধান্ত নেয় ( উপরের চিত্রের মধ্যে " সম্ভবত নির্ধারণ করতে পারে " সমিতিগুলি দেখুন)। এর ফলে কংক্রিটের রাজ্যগুলির মধ্যে সংযোগ ঘটে। উদাহরণস্বরূপ (পরবর্তী বিভাগটি দেখুন), রাজ্য ক রাজ্য বিতে রূপান্তরটি নির্ধারণ করে যদি প্রাসঙ্গিক শ্রেণি পরবর্তী কংক্রিটের রাজ্যে স্থানান্তরের সিদ্ধান্ত নেয়, এই নির্ভরতা চলে যায়।
উপরের সমস্যা বিভাগে উল্লিখিত হিসাবে, রাজ্যটি বোঝায় যে কোনও বস্তুর কোনও অবস্থার উপর নির্ভর করে রান-টাইমে আচরণ পরিবর্তন হয় changes সুতরাং, সীমাবদ্ধ রাষ্ট্রের মেশিনের সম্পর্কের সাথে আলোচনা হিসাবে, রাষ্ট্রের পরিবর্তনের ধারণাটি প্রযোজ্য । [GoF] উল্লেখ করেছে যে রূপান্তরগুলি হয় কংক্রিটস্টেট সাবক্লাসে, বা একটি কেন্দ্রীভূত অবস্থানে (যেমন একটি টেবিল ভিত্তিক অবস্থান) সংজ্ঞায়িত করা যায়।
আসুন একটি সাধারণ সসীম রাষ্ট্রীয় যন্ত্রটি ধরে নিই:
সাবক্লাসগুলি রাষ্ট্রের রূপান্তর সিদ্ধান্ত নেবে (পরবর্তী রাষ্ট্রের বস্তুটি ফিরিয়ে দিয়ে) গতিশীল দেখায় এমন কিছু দেখায়:
কৌশলটির গতিশীলতা প্রদর্শন করতে , এটি একটি বাস্তব উদাহরণ ধার করা কার্যকর ।
সংক্ষিপ্তসার : প্রতিটি প্যাটার্নে প্রসঙ্গের উপর নির্ভর করে কিছু করার জন্য একটি বহুকী কল ব্যবহার করা হয়। রাজ্য রীতিতে পলিমারফিক কল (রূপান্তর) প্রায়শই পরবর্তী রাজ্যে পরিবর্তনের কারণ হয়ে থাকে । কৌশল প্যাটার্নে, পলিমারফিক কলটি সাধারণত প্রসঙ্গে পরিবর্তন করে না (যেমন ক্রেডিট কার্ডের মাধ্যমে একবার প্রদান করা বোঝায় না যে আপনি পরের বার পেপাল দিয়ে অর্থ প্রদান করবেন)। আবার, রাজ্য প্যাটার্নটির গতিশীলতাগুলি তার সাথে সম্পর্কিত ফাইনিনেট রাজ্য মেশিন দ্বারা নির্ধারিত হয় , যা (আমার কাছে) এই প্যাটার্নটির প্রয়োগ সঠিক করতে প্রয়োজনীয়।
কৌশল প্যাটার্নটি একটি হোস্টিং ক্লাস থেকে একটি অ্যালগরিদমের বাস্তবায়ন সরানো এবং এটি একটি পৃথক শ্রেণিতে স্থাপনের সাথে জড়িত। এর অর্থ হ'ল হোস্ট ক্লাসে প্রতিটি অ্যালগরিদম নিজেই প্রয়োগের প্রয়োজন হয় না, যা অশুচি কোডের দিকে পরিচালিত করে।
বাছাইকরণ অ্যালগরিদমগুলি সাধারণত উদাহরণ হিসাবে ব্যবহৃত হয় কারণ তারা সবাই একই ধরণের জিনিস (সাজান) করে। যদি প্রতিটি পৃথক পৃথক বাছাই করা অ্যালগরিদমকে তার নিজস্ব শ্রেণিতে স্থাপন করা হয় তবে ক্লায়েন্ট সহজেই কোন অ্যালগরিদমটি ব্যবহার করবেন তা চয়ন করতে পারে এবং প্যাটার্নটি এটি অ্যাক্সেসের একটি সহজ উপায় সরবরাহ করে।
রাজ্য প্যাটার্নে যখন বস্তুর অবস্থা পরিবর্তিত হয় তখন কোনও সামগ্রীর আচরণ পরিবর্তন করা জড়িত। এর অর্থ হ'ল হোস্ট ক্লাসের মধ্যে এটি থাকতে পারে এমন সমস্ত রাজ্যের আচরণের বাস্তবায়ন সরবরাহ করে না host রাষ্ট্র পরিবর্তন যখন।
একটি আইভিআর (ইন্টারেক্টিভ ভয়েস প্রতিক্রিয়া) সিস্টেম গ্রাহক কল পরিচালনা করে বিবেচনা করুন। আপনি গ্রাহকদের পরিচালনা করতে এটি প্রোগ্রাম করতে চাইতে পারেন:
এই পরিস্থিতিটি পরিচালনা করতে আপনি একটি স্টেট প্যাটার্ন ব্যবহার করতে পারেন ।
একটি সমর্থন নির্বাহীর সাথে গ্রাহককে সংযুক্ত করার এই প্রক্রিয়াটি নিজেই কৌশল প্যাটার্ন ব্যবহার করে প্রয়োগ করা যেতে পারে যেখানে নির্বাহীদের যে কোনও একটির ভিত্তিতে বাছাই করা হয়:
কৌশল প্যাটার্নটি ' কীভাবে ' কিছু ক্রিয়া সম্পাদন করবে এবং রাষ্ট্রীয় প্যাটার্ন তাদের ' কখন ' সম্পাদন করবে সে বিষয়ে সিদ্ধান্ত নেয় ।
কৌশল একই জিনিস শুরু এবং শেষ ফলাফলের সাথে কিছু করে "কিছু" করে তবে অভ্যন্তরীণভাবে বিভিন্ন পদ্ধতি ব্যবহার করে objects সেই অর্থে তারা ক্রিয়াপদ প্রয়োগের উপস্থাপনের সাথে উপমা। রাজ্য প্যাটার্ন OTOH এমন বস্তুগুলি ব্যবহার করে যা "কিছু" - একটি অপারেশনের অবস্থা। যদিও তারা সেই উপাত্তের ক্রিয়াকলাপগুলিকেও প্রতিনিধিত্ব করতে পারে, তবুও তারা ক্রিয়াপদের চেয়ে বিশেষ্যটির প্রতিনিধিত্বের সাথে আরও সাদৃশ্যযুক্ত, এবং রাষ্ট্রীয় মেশিনগুলির জন্য উপযুক্ত।
কৌশল: কৌশলটি স্থির থাকে এবং সাধারণত বেশ কয়েকটি পদক্ষেপ থাকে। (বাছাই করা কেবলমাত্র একটি পদক্ষেপ গঠন করে এবং এই ধরণের উদ্দেশ্যটি বুঝতে এটি খুব আদিম হিসাবে এটি খুব খারাপ উদাহরণ example কৌশলটিতে আপনার "প্রধান" রুটিন কয়েকটি বিমূর্ত পদ্ধতি কল করছে। উদাহরণস্বরূপ "কক্ষের কৌশল প্রবেশ করুন", "প্রধান-পদ্ধতি" হ'ল goThroughDoor (), যা দেখে মনে হচ্ছে: অ্যাপ্রোচডোর (), যদি (লক ()) ওপেনলক (); খোলা দরজা(); enterRoom (); চালু (); দরজা বন্ধ(); যদি (wasLock ()) লকডোর ();
সম্ভাব্য তালাবদ্ধ দরজা দিয়ে এক ঘর থেকে অন্য ঘরে যাওয়ার জন্য এই সাধারণ "অ্যালগরিদম" এর সাবক্লাসগুলি অ্যালগরিদমের পদক্ষেপগুলি প্রয়োগ করতে পারে।
অন্য কথায় কৌশলে সাবক্লাসিং বেসিক অ্যালগরিদমগুলি পরিবর্তন করে না, কেবলমাত্র পৃথক পদক্ষেপ।
উপরে যেটি একটি টেম্পলেট পদ্ধতি প্যাটার্ন। এখন তাদের নিজস্ব প্রয়োগকারী বস্তুগুলিতে একসাথে সম্পর্কিত পদক্ষেপগুলি (আনলকিং / লকিং এবং উদ্বোধন / সমাপনীকরণ) রাখুন এবং তাদের প্রতিনিধি দিন। যেমন একটি চাবিযুক্ত একটি লক এবং একটি কোড কার্ডের সাথে একটি লক হ'ল দুটি ধরণের লক। কৌশল থেকে "পদক্ষেপ" অবজেক্টগুলিতে প্রেরণ করুন। এখন আপনার কাছে কৌশল কৌশল রয়েছে।
একটি স্টেট প্যাটার্ন হ'ল সম্পূর্ণ আলাদা।
আপনার একটি মোড়ানোর বস্তু এবং মোড়ানো বস্তু রয়েছে। মোড়ানো একটি "রাষ্ট্র" state রাষ্ট্রীয় অবজেক্টটি কেবল তার মোড়কের মাধ্যমে অ্যাক্সেস করতে পারে। এখন আপনি যেকোন সময় মোড়ানো বস্তুটি পরিবর্তন করতে পারেন, সুতরাং মোড়কটিকে তার অবস্থার, এমনকি এটির "শ্রেণি" বা প্রকারের পরিবর্তন করতে দেখা যায়।
যেমন আপনার পরিষেবাতে একটি লগ আছে। এটি একটি ব্যবহারকারীর নাম এবং একটি পাসওয়ার্ড গ্রহণ করে। এটির একটি মাত্র পদ্ধতি রয়েছে: লগন (স্ট্রিং ইউজারনেম, স্ট্রিং পাসডওডহ্যাশ)। লগ অন গ্রহণযোগ্য কিনা তা নিজেই সিদ্ধান্ত নেওয়ার পরিবর্তে, সিদ্ধান্তটি কোনও রাষ্ট্রীয় বিষয়কে অর্পণ করে। এই স্টেট অবজেক্টটি সাধারণত ব্যবহারকারী / পাস সংমিশ্রণটি বৈধ কিনা এবং একটি লগ অন সম্পাদন করে তা পরীক্ষা করে। তবে এখন আপনি "চেকার" এর মাধ্যমে এমন একের বিনিময় করতে পারেন যা কেবলমাত্র প্রাইভেলজিড ব্যবহারকারীদের লগইন করতে দেয় (রক্ষণাবেক্ষণের সময় যেমন) বা কাউকে লগইন করতে দেয় না সে দ্বারা। এর অর্থ "পরীক্ষক" সিস্টেমটির "লগ অন স্থিতি" প্রকাশ করে।
সর্বাধিক গুরুত্বপূর্ণ পার্থক্য হ'ল: আপনি যখন কোনও কৌশল বেছে নিয়েছেন তখনই আপনি এটিটি সম্পাদন না করা অবধি না করে নিন। এর অর্থ আপনি তার "মূল পদ্ধতি" কল করেছেন এবং যতক্ষণ না এটি চালিত হয় আপনি কৌশলটি কখনও পরিবর্তন করেন না। আপনার সিস্টেমের রানটাইম চলাকালীন একটি রাজ্য প্যাটার্ন পরিস্থিতিতে ওটিওএইচ আপনি যথাযথ দেখায় আপনি নির্বিচারে রাষ্ট্র পরিবর্তন করেন।
যখন আপনার নির্দিষ্ট কোনও কাজের জন্য একাধিক অ্যালগরিদম থাকে তখন কৌশল প্যাটার্ন ব্যবহার করা হয় এবং ক্লায়েন্টটি রানটাইমে ব্যবহারের জন্য প্রকৃত বাস্তবায়ন স্থির করে।
উইকি স্ট্র্যাটেজি প্যাটার্ন নিবন্ধ থেকে ইউএমএল ডায়াগ্রাম :
মুখ্য সুবিধা:
আরও তথ্য এবং বাস্তব বিশ্বের উদাহরণগুলির জন্য এই পোস্টটি দেখুন:
কৌশল প্যাটার্ন রিয়েল ওয়ার্ল্ড উদাহরণ
রাষ্ট্রের প্যাটার্ন কোনও বস্তুর অভ্যন্তরীণ অবস্থার পরিবর্তন হলে তার আচরণ পরিবর্তন করতে দেয় allows
উইকি স্টেট প্যাটার্ন নিবন্ধ থেকে ইউএমএল ডায়াগ্রাম :
যদি আমাদের কোনও অবস্থার উপর ভিত্তি করে কোনও আচরণের পরিবর্তন করতে হয় তবে আমরা অবজেক্টে একটি রাষ্ট্রের পরিবর্তনশীল থাকতে পারি এবং রাষ্ট্রের উপর ভিত্তি করে বিভিন্ন ক্রিয়া সম্পাদন করতে যদি-অন্য শর্ত ব্লক ব্যবহার করতে পারি। রাজ্য প্যাটার্নটি প্রসঙ্গ এবং রাজ্য বাস্তবায়নের মাধ্যমে এটি অর্জনের জন্য একটি নিয়মিত এবং হেরে-মিলিত উপায় সরবরাহ করতে ব্যবহৃত হয় ।
আরও তথ্যের জন্য এই জার্নালদেব নিবন্ধটি দেখুন।
থেকে কী পার্থক্য sourcemaking এবং journaldev নিবন্ধ:
সাধারণ মানুষের ভাষায়,
কৌশল প্যাটার্নে, কোনও রাজ্য নেই বা তাদের সকলেরই একই অবস্থা রয়েছে। সকলেরই একটি কাজ সম্পাদনের বিভিন্ন উপায়, যেমন বিভিন্ন ডাক্তার একই অবস্থায় একই রোগীর একই রোগকে বিভিন্ন উপায়ে চিকিত্সা করে।
রাষ্ট্রীয় প্যাটার্নে, বিষয়গতভাবে রাষ্ট্রগুলি থাকে, যেমন রোগীর বর্তমান অবস্থা (উচ্চ তাপমাত্রা বা কম টেম্প বলুন), যার ভিত্তিতে পরবর্তী পদক্ষেপের (মেডিসিনের প্রেসক্রিপশন) সিদ্ধান্ত নেওয়া হবে nd এবং একটি রাষ্ট্র অন্য রাষ্ট্রের দিকে পরিচালিত করতে পারে, তাই রাষ্ট্র আছে so রাষ্ট্র নির্ভরতা (রচনা প্রযুক্তিগতভাবে)।
যদি আমরা প্রযুক্তিগতভাবে উভয়ের কোড তুলনার ভিত্তিতে এটি বোঝার চেষ্টা করি তবে আমরা পরিস্থিতিটির সাবজেক্টিভিটি হারাতে পারি, কারণ উভয়ই দেখতে খুব একই রকম।
উভয় নিদর্শন একটি বেস শ্রেণীর প্রতিনিধিত্ব করে যার বেশ কয়েকটি ডেরাইভেটিভ রয়েছে তবে কেবলমাত্র রাষ্ট্রীয় প্যাটার্নেই এই ডেরাইভেটিভ শ্রেণিগুলি প্রসঙ্গ শ্রেণিতে ফিরে আসে।
এটি দেখার আরেকটি উপায় হ'ল কৌশল প্যাটার্নটি রাষ্ট্রীয় প্যাটার্নের একটি সহজ সংস্করণ; একটি উপ-প্যাটার্ন, যদি আপনি চান। এটি যদি আপনি উদ্ভূত রাজ্যগুলি প্রসঙ্গে ফিরে আসতে চান কিনা তা নির্ভর করে (যেমন: আপনি কি তাদের প্রসঙ্গে প্রসঙ্গটিতে কল করতে চান))
আরও তথ্যের জন্য: রবার্ট সি মার্টিন (এবং মাইকা মার্টিন) তাদের বই "এগিল প্রিন্সিপাল, প্যাটার্নস এবং সি ইন ইন প্র্যাকটিসস" এ এটির উত্তর দিন। ( http://www.amazon.com/Agile- প্রিন্সিপালস- প্যাটার্নস- অনুশীলন- C/dp/0131857258 )
এটি বেশ পুরানো প্রশ্ন, তবে তবুও, আমিও একই উত্তরগুলির সন্ধান করছিলাম এবং এটি আমি আবিষ্কার করেছি।
রাজ্য প্যাটার্নের জন্য মিডিয়াল প্লেয়ার প্লে বোতামের একটি উদাহরণ বিবেচনা করা যাক। আমরা যখন খেলি তখন এটি খেলতে শুরু করে এবং প্রসঙ্গটি সচেতন করে তোলে যে এটি খেলছে। প্রতিবার ক্লায়েন্ট প্লে অপারেশন করতে চায় সে প্লেয়ারের বর্তমান অবস্থা পরীক্ষা করে। এখন ক্লায়েন্ট জানে যে বস্তুর অবস্থা প্রাসঙ্গিক অবজেক্টের মাধ্যমে খেলছে তাই তিনি বিরতিতে অবস্থিত অবজেক্ট ক্রিয়াকলাপটিকে কল করুন। রাষ্ট্রটি উপলব্ধি করে এমন ক্লায়েন্টের অংশটি এবং কোন রাজ্যে এটি করা দরকার তা স্বয়ংক্রিয়ভাবে তৈরি করা যেতে পারে।
https://www.youtube.com/watch?v=e45RMc76884 https://www.tutorialspPoint.com/design_pattern/state_pattern.htm
কৌশল প্যাটার্নের ক্ষেত্রে, শ্রেণি চিত্রের বিন্যাস রাষ্ট্রীয় প্যাটার্নের সমান। ক্লায়েন্ট কিছু ব্যবস্থা নিতে এই বিন্যাসে আসে। এটি বিভিন্ন রাজ্যের পরিবর্তে বিভিন্ন অ্যালগরিদমগুলি বলে উদাহরণস্বরূপ বিভিন্ন বিশ্লেষণ যা প্যাটার্নে সম্পাদন করা প্রয়োজন। এখানে ক্লায়েন্টরা প্রসঙ্গটি এটি কী করতে চায় তা কী তা অ্যালগরিদম (ব্যবসায় সংজ্ঞায়িত কাস্টম অ্যালগরিদম) করে এবং তা সম্পাদন করে।
https://www.tutorialspoint.com/design_pattern/strategy_pattern.htm
উভয় প্রয়োগই ঘনিষ্ঠ নীতিটি খোলায় যাতে বিকাশকারী রাষ্ট্রের প্যাটার্নে এবং নতুন অ্যালগরিদমে নতুন রাজ্য যুক্ত করার সক্ষমতা রাখে।
তবে পার্থক্যটি হ'ল তারা ব্যবহার করা হয় যা বস্তুর অবস্থার উপর ভিত্তি করে বিভিন্ন যুক্তি সম্পাদন করতে রাষ্ট্রীয় প্যাটার্ন ব্যবহৃত হয়। এবং কৌশল ক্ষেত্রে একটি ভিন্ন যুক্তি।
রাজ্যটি উত্পন্ন শ্রেণীর মধ্যে কিছুটা নির্ভরশীলতা নিয়ে আসে: যেমন একটি রাজ্য জানে যে অন্যান্য রাজ্যগুলি এর পরে আসবে about উদাহরণস্বরূপ, গ্রীষ্ম শীতের পরে যে কোনও মরসুমের রাজ্যের জন্য আসে, বা শপিংয়ের জন্য ডিপোজিট স্টেটের পরে ডেলিভারি স্টেট।
অন্যদিকে, কৌশলগুলির মতো কোনও নির্ভরতা নেই। এখানে, প্রোগ্রামের / পণ্যের ধরণের ভিত্তিতে যে কোনও ধরণের রাষ্ট্র সূচনা করা যেতে পারে।
পার্থক্যটি http://c2.com/cgi/wiki?StrategyPattern এ আলোচনা করা হয়েছে । ডেটা বিশ্লেষণের জন্য সামগ্রিক কাঠামোর মধ্যে বিভিন্ন অ্যালগরিদমকে বেছে নেওয়ার অনুমতি দেওয়ার জন্য আমি কৌশল প্যাটার্নটি ব্যবহার করেছি। এর মাধ্যমে আপনি সামগ্রিক ফ্রেমওয়ার্ক এবং এর যুক্তি পরিবর্তন না করেই অ্যালগরিদম যুক্ত করতে পারেন।
একটি সাধারণ উদাহরণ হ'ল আপনার একটি ফাংশন অনুকূলকরণের জন্য একটি কাঠামো রয়েছে। ফ্রেমওয়ার্কটি ডেটা এবং পরামিতিগুলি সেট আপ করে। কৌশল প্যাটার্ন আপনাকে ফ্রেমওয়ার্কটি পরিবর্তন না করে স্টেপেস্টেস্ট অ্যারেন্টস, কনজুগেট গ্রেডিয়েন্টস, বিএফজিএস ইত্যাদির মতো অ্যালগোরিদমগুলি নির্বাচন করতে দেয়।
কৌশল এবং রাজ্য প্যাটার্ন উভয়েরই একই কাঠামো রয়েছে। উভয় নিদর্শনগুলির জন্য আপনি যদি ইউএমএল বর্গের চিত্রটি দেখেন তবে সেগুলি দেখতে একই রকম, তবে তাদের উদ্দেশ্য সম্পূর্ণ আলাদা nt স্টেট ডিজাইন প্যাটার্নটি কোনও সামগ্রীর স্থিতি সংজ্ঞা ও পরিচালনা করতে ব্যবহৃত হয়, অন্যদিকে কৌশল কৌশলটি ব্যাবহারযোগ্য অ্যালগরিদমের একটি সেট সংজ্ঞায়িত করতে এবং ক্লায়েন্টকে সেগুলির মধ্যে একটি চয়ন করতে দেয়। সুতরাং কৌশল প্যাটার্ন হ'ল একটি ক্লায়েন্ট চালিত প্যাটার্ন এবং অবজেক্ট নিজেই সেখানে রাষ্ট্র পরিচালনা করতে পারে।
আপনার যখন একটি প্রকল্প থাকে যা 2 টি কার্যে বিভক্ত করা যেতে পারে:
টাস্ক 1: আপনি দুটি ভিন্ন অ্যালগরিদমের একটি ব্যবহার করতে পারেন: alg1, alg2
কার্য 2: আপনি সম্পাদন করতে তিনটি পৃথক পৃথক অ্যালগরিদমের একটি ব্যবহার করতে পারেন: alg3, alg4, alg5
alg1 এবং alg2 হল বিনিময়যোগ্য; alg3, alg4 এবং alg5 বিনিময়যোগ্য।
টাস্ক 1 এবং টাস্ক 2 এ কোন অ্যালগরিদম সম্পাদন করবে তা চয়ন করা রাষ্ট্রগুলির উপর নির্ভর করে:
রাজ্য 1: আপনার 1 টাস্কে অ্যালগ 1 এবং টাস্ক 2 এ অ্যালগ 3 দরকার
রাজ্য 2: আপনার 1 টাস্কে অ্যালগ 2 এবং টাস্ক 2 এ অ্যালগ 5 দরকার
আপনার প্রসঙ্গটি স্টেট অবজেক্টকে রাজ্য 1 থেকে রাষ্ট্র 2 এ পরিবর্তন করতে পারে Then তারপরে আপনার কাজটি অ্যালগ 1 এবং অ্যালগ 3 এর পরিবর্তে অ্যালগ 2 এবং অ্যালগ 5 দ্বারা সম্পন্ন হবে।
টাস্ক 1 বা টাস্ক 2 এর জন্য আপনি আরও বিনিময়যোগ্য অ্যালগরিদম যুক্ত করতে পারেন এটি কৌশল কৌশল।
টাস্ক 1 এবং টাস্ক 2 এ বিভিন্ন অ্যালগরিদমের সংমিশ্রণের সাথে আপনার আরও রাজ্য থাকতে পারে State
'কৌশল' কেবলমাত্র একটি অ্যালগরিদম যা আপনার প্রয়োজন অনুযায়ী আপনি বিভিন্ন পরিস্থিতিতে এটি পরিবর্তন করতে পারেন এবং এটি আপনার জন্য কিছু প্রসেস করে। যাত্রা। আপনি কীভাবে কোনও ফাইলকে সংকুচিত করতে পারেন তা চয়ন করতে পারেন। জিপ বা রার ... একটি পদ্ধতিতে।
কিন্তু 'স্টেট' আপনার সমস্ত বস্তুর আচরণ পরিবর্তন করতে পারে, যখন এটি পরিবর্তন হয়, এমনকি এটি অন্যান্য ক্ষেত্রও পরিবর্তন করতে পারে ... এজন্যই এর মালিকের সাথে এটি উল্লেখ রয়েছে। আপনার লক্ষ্য করা উচিত যে কোনও অবজেক্ট ক্ষেত্র পরিবর্তন করা বস্তুর আচরণকে একেবারে পরিবর্তন করতে পারে। যাত্রা। আপনি যখন اعتراضকে স্টেট 1 এ স্টেট 1 এ পরিবর্তন করেন, আপনি 10 তে পূর্ণসংখ্যা পরিবর্তন করেন .. সুতরাং যখন আমরাজেজ.এফ0 () কল করি যা কিছু গণনা করে এবং সেই পূর্ণসংখ্যাটি ব্যবহার করে, ফলাফলটি প্রভাবিত করে।