কারও কারখানা এবং কৌশল নিদর্শন মধ্যে পার্থক্য ব্যাখ্যা করতে পারেন?
আমার জন্য উভয়ই অতিরিক্ত কারখানার শ্রেণি (যা কারখানার নিদর্শনগুলিতে পণ্যটির একটি উপাদান তৈরি করে) বাদে অন্যরকম দেখাচ্ছে looking
কারও কারখানা এবং কৌশল নিদর্শন মধ্যে পার্থক্য ব্যাখ্যা করতে পারেন?
আমার জন্য উভয়ই অতিরিক্ত কারখানার শ্রেণি (যা কারখানার নিদর্শনগুলিতে পণ্যটির একটি উপাদান তৈরি করে) বাদে অন্যরকম দেখাচ্ছে looking
উত্তর:
একটি কারখানার প্যাটার্ন একটি ক্রিয়েটিভ নিদর্শন। একটি কৌশল প্যাটার্ন একটি অপারেশনাল নিদর্শন। অন্য একটি উপায় রাখুন, একটি নির্দিষ্ট ধরণের অবজেক্ট তৈরি করতে কারখানার প্যাটার্ন ব্যবহৃত হয়। একটি কৌশল পদ্ধতি একটি নির্দিষ্ট পদ্ধতিতে কোনও অপারেশন (বা অপারেশনগুলির সেট) সম্পাদন করতে ব্যবহৃত হয়। ক্লাসিক উদাহরণে, একটি কারখানা বিভিন্ন ধরণের প্রাণী তৈরি করতে পারে: কুকুর, বিড়াল, বাঘ, যখন একটি কৌশল প্যাটার্নটি নির্দিষ্ট ক্রিয়া সম্পাদন করে, উদাহরণস্বরূপ, সরান; রান, ওয়াক, বা লোপ কৌশলগুলি ব্যবহার করে।
আসলে দুটি একসাথে ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, আপনার একটি কারখানা থাকতে পারে যা আপনার ব্যবসায়ের অবজেক্ট তৈরি করে। এটি অধ্যবসায় মাধ্যমের ভিত্তিতে বিভিন্ন কৌশল ব্যবহার করতে পারে। যদি আপনার ডেটা XML এ স্থানীয়ভাবে সঞ্চয় করা থাকে তবে এটি একটি কৌশল ব্যবহার করবে। যদি ডেটাটি ভিন্ন ডাটাবেসে দূরবর্তী হয় তবে এটি অন্যটি ব্যবহার করবে।
কৌশল প্যাটার্ন আপনাকে একটি শ্রেণীর আচরণ বহিরাগতভাবে পরিবর্তন করতে দেয়।
কারখানার নিদর্শন আপনাকে অবজেক্ট তৈরির ব্যবস্থা করতে দেয় enc
গ্যারি একটি দুর্দান্ত পয়েন্ট তোলে। আপনি যদি "কনক্রেশনগুলি" না দিয়ে অ্যাবস্ট্রাকশনগুলিতে কোডিংয়ের নীতিটি ব্যবহার করেন তবে অনেকগুলি নিদর্শন কোনও থিমের পরিবর্তনের মতো দেখতে শুরু করে।
টভানফসন যা বলেছিল কেবল তা যুক্ত করতে, অনেকগুলি নিদর্শন বাস্তবায়ন হিসাবে একই দেখায়। এটি হ'ল, আপনি অনেকগুলি এমন একটি ইন্টারফেস তৈরি করেছেন যেখানে সম্ভবত আপনার কোডের আগে এটি ছিল না এবং তারপরে সেই ইন্টারফেসের বাস্তবায়নগুলির একটি গোছা তৈরি করে। পার্থক্যটি তাদের উদ্দেশ্য এবং তারা কীভাবে ব্যবহৃত হয় in
শুধুমাত্র কংক্রিট উদাহরণ তৈরি করুন। বিভিন্ন যুক্তি বিভিন্ন বস্তুর ফলস্বরূপ হতে পারে। এটি যুক্তি ইত্যাদির উপর নির্ভর করে
একটি ক্রিয়া সম্পাদনের জন্য অ্যালগরিদম (পদক্ষেপ) সজ্জিত করুন। সুতরাং আপনি কৌশলটি পরিবর্তন করতে পারেন এবং অন্য একটি অ্যালগরিদম ব্যবহার করতে পারেন।
উভয় দেখতে দেখতে অনেকটা একইরকম, উদ্দেশ্য বরং ভিন্ন, একটি উদ্দেশ্য অন্যটির তৈরি করা একটি ক্রিয়া সম্পাদন করা।
So. যদি আপনার কারখানার পদ্ধতি স্থির হয় তবে আপনার এটির মতো থাকতে পারে:
public Command getCommand( int operatingSystem ) {
switch( operatingSystem ) {
case UNIX :
case LINUX : return new UnixCommand();
case WINDOWS : return new WindowsCommand();
case OSX : return new OSXCommand();
}
}
তবে ধরুন আপনার কারখানার আরও উন্নত বা গতিশীল সৃষ্টি প্রয়োজন। আপনি কারখানার পদ্ধতিতে একটি কৌশল যুক্ত করতে পারেন এবং পুনরায় সংকলন না করেই এটি পরিবর্তন করতে পারেন, কৌশলটি রানটাইমে পরিবর্তিত হতে পারে।
প্রথমে সাধারণ কারখানা এবং বিমূর্ত কারখানার মধ্যে পার্থক্য তৈরি করতে হবে। প্রথমটি হ'ল একটি সরল কারখানা যেখানে আপনার কেবলমাত্র একটি শ্রেণি থাকে যা অবজেক্ট তৈরির কারখানা হিসাবে কাজ করে, যখন আপনি পরবর্তী সময়ে কোনও কারখানার ইন্টারফেসের সাথে সংযুক্ত হন (যা পদ্ধতির নামগুলি সংজ্ঞায়িত করে) এবং তারপরে এই ইন্টারফেসটি কার্যকরকারী বিভিন্ন ফ্যাক্টরিগুলিকে কল করে যা কিছু মানদণ্ডের ভিত্তিতে একই পদ্ধতির বিভিন্ন বাস্তবায়ন হওয়ার কথা। উদাহরণস্বরূপ, আমাদের একটি বাটনক্রিয়াশনফ্যাক্টরি ইন্টারফেস রয়েছে, যা দুটি কারখানা দ্বারা প্রয়োগ করা হয়, প্রথম উইন্ডোজবটন ক্রিয়েশনফ্যাক্টরি (উইন্ডোজ চেহারা এবং অনুভূতির সাথে বোতাম তৈরি করে) এবং দ্বিতীয় লিনাক্সবাটন ক্রিয়েশনফ্যাক্টরি (লিনাক্স চেহারা এবং অনুভূতির সাথে বোতাম তৈরি করে)। সুতরাং এই উভয় কারখানার বিভিন্ন বাস্তবায়ন (অ্যালগোরিদম) সহ একই সৃষ্টি পদ্ধতি রয়েছে।
উদাহরণস্বরূপ, আপনি যদি লিনাক্সের চেহারা এবং অনুভূতিযুক্ত বোতামগুলি চান:
ButtonCreationFactory myFactory = new LinuxButtonCreationFactory();
Button button1 = myFactory.createButton(...);
অথবা আপনি যদি উইন্ডোজ বোতাম চান
ButtonCreationFactory myFactory = new WindowsButtonCreationFactory();
Button button1 = myFactory.createButton(...);
ঠিক এই ক্ষেত্রে, এটি এক ধরণের কৌশল প্যাটার্নের ফলস্বরূপ, যেহেতু এটি কিছু সৃষ্টি করার জন্য অ্যালগরিদমকে পৃথক করে। তবে এটি শব্দার্থগতভাবে পৃথক হয়েছে কারণ এটি অপারেশনাল অ্যালগরিদমের চেয়ে ওবিজেট ক্রিয়েশনের জন্য ব্যবহৃত হয়। সুতরাং, মূলত অ্যাবস্ট্রাক্ট কারখানার সাথে আপনার বিভিন্ন কৌশল ব্যবহার করে অবজেক্ট তৈরি করা হয়েছে যা কৌশল প্যাটার্নের সাথে এটি একেবারেই সাদৃশ্যপূর্ণ। তবে অ্যাস্ট্রাক্ট ফ্যাক্টরিটি সৃজনশীল, যখন কৌশল প্যাটার্নটি কার্যকর রয়েছে। বাস্তবায়ন অনুসারে, তারা একই রকম হয়।
কারখানা (এবং ফ্যাক্টরিমাথোদ ফ্যাক্টরি দ্বারা ফিরে এসেছে) :
এই উইকিপিডিয়া নিবন্ধ এবং javarevisited নিবন্ধটি দেখুন
কৌশল প্যাটার্ন:
উদাহরণ:
আপনি কোনও নির্দিষ্ট আইটেমের জন্য ছাড়ের কৌশলটি কনফিগার করতে পারেন (এয়ারফেয়ার টিকিট বা শপিংকার্ট আইটেম)। এই উদাহরণস্বরূপ, আপনি জুলাই - ডিসেম্বরের সময় কোনও আইটেমকে 25% ছাড় এবং জুনারি-জুনের সময়ে আইটেমটিতে কোনও ছাড় দেবেন না।
সম্পর্কিত পোস্ট:
কৌশল প্যাটার্ন রিয়েল ওয়ার্ল্ড উদাহরণ
নকশার প্যাটার্নস: ফ্যাক্টরী বনাম কারখানা পদ্ধতি বনাম বিমূর্ত কারখানা
অস্কার যা বলেছিল এবং তার কোডের প্রসঙ্গে তা বাড়ানোর জন্য:
গেটকমন্ডটি কারখানা এবং ইউনিক্সকম্যান্ড, উইন্ডোজকম্যান্ড এবং ওএসএক্সকম্যান্ড শ্রেণি কৌশলগুলি Strate
কোড বা শ্রেণিবিন্যাসকে দেখে আপনি পার্থক্যটি বুঝতে পারবেন না। জিওএফ নিদর্শনগুলি সঠিকভাবে উপলব্ধি করতে, তাদের উদ্দেশ্যগুলি সন্ধান করুন:
কৌশল: "অ্যালগরিদমগুলির একটি পরিবারকে সংজ্ঞায়িত করুন, প্রত্যেককে আবদ্ধ করুন এবং তাদেরকে বিনিময়যোগ্য করে দিন Strate কৌশলটি অ্যালগরিদমকে যে ক্লায়েন্টগুলি ব্যবহার করে তাদের থেকে আলাদাভাবে আলাদা হতে দেয়" "
কারখানার পদ্ধতি: "কোনও অবজেক্ট তৈরির জন্য একটি ইন্টারফেস সংজ্ঞায়িত করুন তবে কোন শ্রেণিটি ইনস্ট্যান্ট করতে হবে তা সাবক্লাসগুলি সিদ্ধান্ত নিতে দিন F ফ্যাক্টরি পদ্ধতিটি একটি শ্রেণিকে উপক্লাসে স্থগিত করতে দেয়" "
এবং এই দুটি নিদর্শনগুলির মধ্যে অভিপ্রায় এবং পার্থক্য সম্পর্কে এখানে বিস্তৃত ব্যাখ্যা: কারখানা পদ্ধতি এবং কৌশল ডিজাইনের ধরণগুলির মধ্যে পার্থক্য
অস্কারের সাথে আমি এই বিষয়টি আঁকতে পারি যে কারখানার বাস্তবায়নের জন্য তাঁর উদাহরণটি দৃ tight়ভাবে একত্রে এবং খুব বন্ধ, এটি আপনার অবদানের কৌশল কৌশল হিসাবে আশ্চর্য হওয়ার কিছু নেই। কারখানার বাস্তবায়ন কোনও নির্দিষ্ট শ্রেণীর ইনস্ট্যান্ট করা হচ্ছে এমন নির্দিষ্ট সংখ্যার উপর নির্ভর করবে না, উদাহরণস্বরূপ:
public Command getCommand( int operatingSystem ) {
return commandTable.get(operatingSystem);
}
...
public class WindowsCommand implements Command {
...
static {
CommandTable.getInstance().registerCommand(WIN_COMMAND_ID, new WindowsCommand());
}
}
আমি অনুমান করি যে একটি বা অন্যটি বেছে নেওয়ার সর্বাধিক উপযুক্ত মানদণ্ডটি হল আপনার ক্লাস এবং পদ্ধতিগুলির নামকরণের জন্য আপনি নিযুক্ত শর্তগুলি বিবেচনা করে, আমাদের সবার উচিত ইন্টারফেসগুলিতে প্রোগ্রাম করা উচিত, ক্লাসগুলিতে নয় এবং লক্ষ্যকেও কেন্দ্র করে: আমরা নির্ধারণ করি কোন কোড রানটাইমের সময় কার্যকর হবে। এটি বলেছিল, আমরা উভয় ধরণের ব্যবহার করে লক্ষ্য অর্জন করতে পারি।
কৌশল এবং কারখানা বিভিন্ন উদ্দেশ্য। কৌশলে আপনার কাছে পদ্ধতির সংজ্ঞা দেওয়া আছে, এই প্যাটার্নটি ব্যবহার করে আপনি আচরণটি (অ্যালগোরিদম) বিনিময় করতে পারেন। কারখানায় আসার চারপাশে প্রচুর বৈচিত্র রয়েছে। কিন্তু জিও 4 স্টেটের কারখানার মূল প্যাটার্নটি শিশু শ্রেণিতে অবজেক্ট তৈরির বিষয়টি ছেড়ে দেয়। এখানে কারখানার সাথে আপনি সম্পূর্ণরূপে প্রতিস্থাপন করছেন এমন আচরণটি নয় যা আপনার আগ্রহী in
কারখানার প্যাটার্ন হ'ল ক্রিয়েটিভ প্যাটার্ন, যা নির্দিষ্ট বৈশিষ্ট্য (আচরণ) দিয়ে তৈরি হয়। সৃষ্টির পরে রান সময়ে আপনি এর বৈশিষ্ট্যগুলি (আচরণ) পরিবর্তন করেননি। সুতরাং আপনার যদি পৃথক বৈশিষ্ট্য (আচরণ) প্রয়োজন হয় তবে আপনাকে অবজেক্টটি মুছতে হবে এবং প্রয়োজনীয় বৈশিষ্ট্য (আচরণ) সহ নতুন বস্তু তৈরি করতে হবে। যা গুড নয়। কৌশল কৌশল হিসাবে আপনি রান সময় বৈশিষ্ট্য (আচরণ) পরিবর্তন করতে পারেন।