নকশার প্যাটার্ন উন্মুক্ত: কৌশল প্যাটার্ন

এই ব্লগে আমরা কৌশল ডিজাইন প্যাটার্নটি উন্মোচন করব, যা অ্যালগরিদমের একটি বিনিময়যোগ্য পরিবার তৈরি করতে ব্যবহৃত হয় যা গতিশীলভাবে চয়ন করা যায়।

'



কিভাবে একটি ডাবল একটি int এ castালাই

'ডিজাইন প্যাটার্নস এক্সপোজড' সিরিজের প্রথম পোস্টে আপনাকে স্বাগতম। এই সিরিজে আমরা প্রতিটি ডিজাইন প্যাটার্নটি স্ক্র্যাচ থেকে উন্মোচন করতে যাচ্ছি।



কেবলমাত্র একটি প্রোগ্রামিং ভাষা এবং এর নির্মাণগুলি জানলে আপনি আরও উন্নত প্রোগ্রামার বা বিকাশকারী হতে পারবেন না। এটি এমন সফ্টওয়্যার তৈরি করতে ডিজাইন প্যাটার্নগুলির জ্ঞান প্রয়োজন যা আজ এবং ভবিষ্যতেও কাজ করবে।

অনেকগুলি বিকাশকারী ইতিমধ্যে সেই নকশাগুলির সমস্যার মুখোমুখি হয়ে এসেছেন যা আপনি এখনই সম্মুখীন করছেন বা ভবিষ্যতে আপনার মুখোমুখি হবে। তারা এই সমস্যাটি মোকাবেলার একটি মানক উপায় নির্দিষ্ট করেছে। সুতরাং ডিজাইন প্যাটার্নগুলি ব্যবহার করে আপনি প্রমাণিত কৌশলগুলি ব্যবহারের সুবিধা পাবেন।



প্রতিটি ডিজাইন প্যাটার্ন একটি নির্দিষ্ট ধরণের পরিস্থিতি সমাধানের জন্য এমন পরিস্থিতিতে থাকতে পারে যেখানে একাধিক ডিজাইন প্যাটার্ন ব্যবহার করা যেতে পারে।

বেশিরভাগ প্রোগ্রামার ডিজাইন নিদর্শন, রিডানড্যান্ট কোড বা এমনকি শক্ত-সংযুক্তকরণ সম্পর্কে বিরক্ত না করে কেবল যে সমস্যার মুখোমুখি হন সেগুলি সমাধান করার চেষ্টা করেন। তবে ভাল প্রোগ্রামাররা অন্যভাবে শুরু করে। তারা আজকের প্রয়োজনীয়তা, ভবিষ্যতের প্রয়োজনীয়তা, কোড রক্ষণাবেক্ষণ এবং কোডের পুনঃব্যবহারযোগ্যতা সম্পর্কে চিন্তাভাবনা করে।

ভাল প্রোগ্রামাররা প্রয়োজনীয়তাগুলি পেয়ে গেলে কোডিং শুরু করার তাড়াহুড়ো হয় না। তারা বসে বসে তাদের ডিজাইনটি কার্যকর হবে কিনা তা নিয়ে ভাবনা চিন্তা করে। যদি হ্যাঁ, এটি 6 মাস পরে কাজ করবে কিনা, যখন প্রয়োজনীয়তা পরিবর্তন হবে।



ভাল প্রোগ্রামাররা তাদের কলম এবং কাগজ নেয় এবং তাদের ক্লাস এবং ক্লাসের মধ্যে সম্পর্কের নকশা শুরু করে। তারা তাদের নকশায় আলগা সংযোগ এবং উচ্চ সংহতি পেতে চেষ্টা করে, এই সমস্তগুলি করার সময় তাদের মনে অবজেক্ট-ওরিয়েন্টড নীতি থাকে have তারা অবিলম্বে নিম্ন-স্তরের কোডের ভিতরে যায় না। নমনীয় এবং পুনরায় ব্যবহারযোগ্য সফ্টওয়্যার ডিজাইন করার জন্য, আপনার এই পদ্ধতির অনুসরণ করা উচিত অন্যথায় আপনি সর্বদা নিজেকে আগে কোড লিখেছিলেন এমন সংশোধনকারী কোড দেখতে পাবেন।

সফ্টওয়্যার শিল্পে কেবল একটি জিনিস ধ্রুবক এবং এটি পরিবর্তন. প্রয়োজনীয়তা অবশ্যই পরিবর্তন করতে থাকবে। সুতরাং আমরা কীভাবে এমন সফ্টওয়্যারটি ডিজাইন করব যা আপনার কোডটি ভবিষ্যতের প্রয়োজনীয়তার সাথে সহজেই খাপ খাইয়ে নিতে পারে? তার জন্য আপনাকে তাড়াতাড়ি শুরু করতে হবে এবং এটি এমনভাবে ডিজাইন করতে হবে যাতে ভবিষ্যতের প্রয়োজনীয়তাগুলি আপনার পূর্ববর্তী কোডটি ভঙ্গ না করে।

আমি এটা কিভাবে করবো?

ঠিক আছে, এই নীতিগুলির উপর ভিত্তি করে নকশার নীতিমালা এবং ডিজাইন প্যাটার্নগুলি অনুসরণ করে এটি করা যেতে পারে।

এখন, কোডিংয়ে ডুব দিন এবং আরও ভাল প্রোগ্রামার হওয়ার যাত্রা শুরু করি। এই পোস্টে, আমরা একটি অত্যন্ত গুরুত্বপূর্ণ প্যাটার্ন উন্মোচন করতে যাচ্ছি - কৌশল প্যাটার্ন

যখন আমি বলি সবচেয়ে গুরুত্বপূর্ণ এটি কৌশলগত প্যাটার্ন দ্বারা সমাধান করা সাধারণ সমস্যাটির প্রতিফলন করে।

কৌশল প্যাটার্ন কি?

এখানে ‘গ্যাং অফ ফোর’ বইয়ের সরাসরি সংজ্ঞা দেওয়া হয়েছে: “কৌশল প্যাটার্নটি অ্যালগরিদমের একটি বিনিময়যোগ্য পরিবার তৈরি করতে ব্যবহৃত হয় যা থেকে রান-টাইমে প্রয়োজনীয় প্রক্রিয়াটি বেছে নেওয়া হয়”।

আপনি যদি হনবুঝতে পারছি না, চিন্তা করবেন না, আমরা এটি একটিতে ব্যাখ্যা করতে যাচ্ছিসরলউপায়তোমার জন্যবোঝা.

আসুন প্রথমে সমস্যাটি বুঝতে পারি এবং তারপরে আমরা দেখব কৌশল কৌশল কীভাবে এটি সমাধান করতে পারে।

উপরের ইউএমএল ডায়াগ্রামে, আমরা অ্যানিম্যাল অ্যাবস্ট্রাক্ট ক্লাস এবং দুটি কংক্রিট ক্লাস, ডগ এবং বার্ড, এনিমেল সুপার ক্লাস থেকে প্রসারিত করেছি।

সুতরাং আসুন একটি প্রাণী বিমূর্ত শ্রেণি এবং দুটি কংক্রিট শ্রেণি, কুকুর এবং পাখি সংজ্ঞায়িত করি def

আপনি উপরের নকশা সম্পর্কে কি মনে করেন? আমাদের ডিজাইনে একটি বড় ভুল রয়েছে।

সমস্ত প্রাণী উড়তে পারে না, উপরের ক্ষেত্রে যেমন কুকুর উড়তে পারে না। তবে তবুও এর ‘উড়ে’ আচরণ রয়েছে।

আমরা প্রাণী শ্রেণীর ভিতরে বিমূর্ত ফ্লাই () পদ্ধতি লিখে ভুল করেছি। এই নকশাটি প্রতিটি উপ-শ্রেণীর কুকুর, পাখি, পেঙ্গুইন, কুমির, গোস ইত্যাদিকে উড়ে () পদ্ধতি প্রয়োগ করতে বাধ্য করবে।

আমাদের বোঝা উচিত ছিল যে উড়ন্ত এমন একটি দক্ষতা যা সমস্ত প্রাণীরই নয়। অ্যানিম্যাল অ্যাবস্ট্রাক্ট ক্লাসে ফ্লাই () পদ্ধতি সরবরাহ করে আমরা সমস্ত উপ-শ্রেণিতে উড়ানের ক্ষমতা নির্ধারণ করেছি যা প্রাণীর সমস্ত উপ-শ্রেণীর জন্য সঠিক নয়।

সাব-ক্লাসে ফ্লাই পদ্ধতি বাস্তবায়নে কী সমস্যা তা আপনি ভাবতে পারেন। যদিও আপনি 'আমি উড়তে পারি না' মুদ্রণের জন্য নন-ফ্লাইং এনিমেল সাব-ক্লাসে ফ্লাই () পদ্ধতিটি প্রয়োগ করতে পারি। তবে সমস্যাটি হ'ল, আপনি এখনও উড়ন্ত বিহীন প্রাণীদের উড়ন্ত আচরণ দিচ্ছেন। এটি সঠিক নয়।

কুকুর.ফ্লাই () বা কুমির.ফ্লাই () কল করতে কেমন লাগে।

সুতরাং, এখন আমরা বুঝতে পেরেছি যে আমাদের নকশাটি সঠিক নয় এবং আমাদের উড়ন্ত () পদ্ধতিটি উপ-শ্রেণীর থেকে সরিয়ে নেওয়া উচিত।

আমাদের ক্লাসগুলি এমনভাবে ডিজাইনের অন্য উপায় কী যে আমাদের নকশায় সমস্ত প্রাণী উপ-শ্রেণিগুলিকে ফ্লাই আচরণের জন্য প্রয়োগ করা হয় না।

একটি সমাধান যা তাত্ক্ষণিক মনে আসবে তা হ'ল আমরা একটি উড়ন্ত ইন্টারফেস তৈরি করতে পারি যে উড়ানের পদ্ধতি রয়েছে এবং কেবল উড়তে পারে এমন প্রাণীই উড়ন্ত ইন্টারফেসটি প্রয়োগ করতে পারে। এইভাবে আমরা উড়াল আচরণের সংজ্ঞা দেওয়ার জন্য সমস্ত প্রাণী উপ-শ্রেণি প্রয়োগ করব না। সুতরাং কোডটি এই নকশা পদ্ধতির যাক।

এখন, অ্যানিম্যাল ক্লাসটি উড়ন্ত পদ্ধতিটি অ্যানিম্যাল ক্লাস থেকে সরিয়ে নেওয়ার পরে নীচের কোডের মতো দেখাবে।

এবার ফ্লাইং ইন্টারফেসটি সংজ্ঞায়িত করা যাক

এখন, কুকুর ক্লাস পরিবর্তন করা হবেযেমননীচে কোড এবং এটি উড়ে আচরণ করা প্রয়োজন হয় না।

আসুন দেখে নেওয়া যাক আমাদের কয়েকটি অ্যানিম্যাল সাব-ক্লাসগুলির সাথে উড়ন্ত আচরণ থাকবে।

আমরা আমাদের আগের সমস্যাটি সমাধান করেছি, তবে আমরা একটি নতুন সমস্যায় পড়েছি এবং এটি হ'ল 'কোড নকল'।

বলুন, আমরা 100 টি বিভিন্ন উড়ন্ত এনিমেল সাব-ক্লাস করতে যাচ্ছি। উড়ন্ত আচরণের জন্য আমাদের কোডটির নকল করতে হবে যেহেতু উড়ন্ত ইন্টারফেস ফ্লাই আচরণের জন্য কোনও প্রয়োগ সরবরাহ করতে পারে না এবং পরে আমরা যদি কোনও উপ-শ্রেণিতে ফ্লাই () পদ্ধতি প্রয়োগ করতে চাই তবে আমাদের সেই শ্রেণিটি খুলতে হবে এবং কোডটি পরিবর্তন করতে হবে, যা খারাপ। আমাদের কাছে বড় কিছু অভাব রয়েছে এবং তা হচ্ছে, রান-টাইমে আমরা কোনও শ্রেণীর উড়ন্ত আচরণ পরিবর্তন করতে পারি না।

তবে চিন্তা করবেন না, আপনাকে এই সমস্যা থেকে বের করার জন্য কৌশল প্যাটার্ন রয়েছে।

সুতরাং কৌশল প্যাটার্নটি ব্যবহার করার জন্য আমাদের কোডটি রিফ্যাক্টর করুন।

উড়ন্ত ইন্টারফেসটি যেমন রয়েছে তেমন থাকবে। এখন, প্রতিটি ফ্লাইং সাব-ক্লাস নিজেই ফ্লাইং ইন্টারফেস বাস্তবায়ন করার পরিবর্তে, আমরা পৃথক কংক্রিট ক্লাস নির্ধারণ করতে চলেছি যা বিভিন্ন উড়ানের আচরণ বাস্তবায়িত করবে। কীভাবে এটি করা যায় তা দেখুন।

নবীনদের জন্য সেরা জাভা আদর্শ

সুতরাং, এটি কীভাবে কাজ করে, আসুন টেস্টক্লাসটি দেখুন

কৌশল প্যাটার্ন ব্যবহার করে আমরা এখন রান-টাইমে যে কোনও প্রাণীর উড়ানের আচরণ পরিবর্তন করতে সক্ষম হয়েছি এবং এটি কোনও উপ-শ্রেণীর দ্বারা উড়ন্ত আচরণের নির্দিষ্টকরণের জন্য প্রয়োগ না করেই হয়।

কৌশল প্যাটার্ন কখন ব্যবহার করবেন?

আপনি যখন রান-টাইমে আচরণকে পরিবর্তনশীল করতে সক্ষম হতে চান তখন।

আপনি কৌশল প্যাটার্নটি স্পষ্টভাবে বুঝতে পেরেছেন তা নিশ্চিত করার জন্য আরেকটি উদাহরণ নেওয়া যাক।

উপরের কর্মচারী শ্রেণিতে আমরা কর্মচারীর তার পদবি নির্ধারণ করে তার বেতন নির্ধারণ করছি। যদি কোনও কর্মচারী 'ইন্টার্ন' হয় তবে আমরা প্রকৃত বেতন গণনার জন্য বেসিক বেতনে 10% বোনাস যুক্ত করছি are

কোনও কর্মী যদি 'ওয়েব বিকাশকারী' হন তবে আমরা আসল বেতন গণনা করার জন্য বেসিক বেতনে ২০% বোনাস যুক্ত করছি এবং একই ধরণের প্রক্রিয়া অন্যান্য ধরণের কর্মীদের জন্য অনুসরণ করে। যদিও প্রকৃত বেতন গণনা করার জন্য আমাদের অ্যালগরিদম এটি বোঝা সহজ করার জন্য খুব সহজ তবে বেশিরভাগ সময় এর মধ্যে অনেক তুলনা এবং গণনা অন্তর্ভুক্ত রয়েছে।

সুতরাং, কর্মচারী-শ্রেণীর কোডে কী ভুল?

ওয়েল, বেতন গণনার কোড (getPay ()) অচল। মনে করুন আমি 'ইন্টার্ন' এর জন্য বোনাসটি 10% থেকে 14% এ পরিবর্তন করতে চাই। আমাকে কর্মচারী-শ্রেণীর কোডটি খুলতে হবে এবং এটি পরিবর্তন করতে হবে।

এবং আরেকটি সমস্যা হ'ল আমি রান-টাইমে কোনও কর্মীর বেতন অ্যালগরিদম পরিবর্তন করতে পারি না। তো, কীভাবে করব? কৌশল প্যাটার্ন বিশেষত এই জাতীয় সমস্যা হ্যান্ডেল করার জন্য ব্যবহৃত হয়।

কৌশল প্যাটার্ন ব্যবহার করার জন্য কোডটির রিফ্যাক্টর আসুন।

আমি বেতন গণনা করতে বেশ কয়েকটি অ্যালগরিদম সংজ্ঞায়িত করতে যাচ্ছি। তারপরে আমি রান-টাইমে বেতন গণনা করতে এই অ্যালগরিদমগুলির যে কোনওটি ব্যবহার করতে সক্ষম হব।

এখন, কর্মচারী শ্রেণি কীভাবে পরিবর্তন হতে চলেছে তা দেখা যাক।

বিঃদ্রঃ: আমি কর্মী শ্রেণি থেকে বেতন গণনার যুক্তি সরিয়েছি এবং একটি সেট পেএলগোরিদম () পদ্ধতি তৈরি করেছি যার মাধ্যমে আমি পে-অ্যালগরিদম সেট করব যা আমি বেতন গণনার জন্য ব্যবহার করতে চাই।

এটি আমাকে রান-টাইমে কোনও পে-অ্যালগরিদমকে গতিশীলভাবে নির্দিষ্ট করে বেতন গণনা করার নমনীয়তা দেয়। এছাড়াও নোট করুন, পরে যদি আমাকে বেতন গণনার যুক্তি পরিবর্তন করতে হয় তবে আমি একটি নতুন পেএলগোরিদম তৈরি করতে পারি এবং বেতনটি গণনার জন্য এটি ব্যবহার করতে পারি। আমার আগের কোডটি পরিবর্তন করার দরকার নেই, এটি কি দুর্দান্ত না?

সুতরাং আসুন এটি কাজ করে দেখুন।

একটি অ্যারে জাভাস্ক্রিপ্ট আকার

আমি আশা করি আপনি কৌশল প্যাটার্নটি খুব ভালভাবে বুঝতে পেরেছেন। অনুশীলন করে কিছু শেখার সর্বোত্তম উপায়।

কৌশল প্যাটার্ন বা অন্য কোনও প্যাটার্ন সম্পর্কিত আপনার যদি কোনও প্রশ্ন থাকে তবে আপনার প্রশ্নগুলি নীচে ছেড়ে দিন।

পরবর্তী পোস্টের জন্য সন্ধান করুন, যেখানে আমরা একটি সর্বাধিক জনপ্রিয় ডিজাইন প্যাটার্ন, কারখানার প্যাটার্ন উন্মোচন করব।

ততক্ষণ আপনি এটির সাথে কোড প্লে ডাউনলোড করতে পারবেন এবং নিশ্চিত করুন যে আপনি কৌশলটির প্যাটার্নটি আপনার মাথায় রেখেছেন।

আমাদের জন্য একটি প্রশ্ন আছে? তাদের মন্তব্য বিভাগে উল্লেখ করুন এবং আমরা আপনার কাছে ফিরে আসব।

সম্পর্কিত পোস্ট: