কারখানা এবং কৌশল নিদর্শন মধ্যে পার্থক্য কি?


145

কারও কারখানা এবং কৌশল নিদর্শন মধ্যে পার্থক্য ব্যাখ্যা করতে পারেন?

আমার জন্য উভয়ই অতিরিক্ত কারখানার শ্রেণি (যা কারখানার নিদর্শনগুলিতে পণ্যটির একটি উপাদান তৈরি করে) বাদে অন্যরকম দেখাচ্ছে looking

উত্তর:


226

একটি কারখানার প্যাটার্ন একটি ক্রিয়েটিভ নিদর্শন। একটি কৌশল প্যাটার্ন একটি অপারেশনাল নিদর্শন। অন্য একটি উপায় রাখুন, একটি নির্দিষ্ট ধরণের অবজেক্ট তৈরি করতে কারখানার প্যাটার্ন ব্যবহৃত হয়। একটি কৌশল পদ্ধতি একটি নির্দিষ্ট পদ্ধতিতে কোনও অপারেশন (বা অপারেশনগুলির সেট) সম্পাদন করতে ব্যবহৃত হয়। ক্লাসিক উদাহরণে, একটি কারখানা বিভিন্ন ধরণের প্রাণী তৈরি করতে পারে: কুকুর, বিড়াল, বাঘ, যখন একটি কৌশল প্যাটার্নটি নির্দিষ্ট ক্রিয়া সম্পাদন করে, উদাহরণস্বরূপ, সরান; রান, ওয়াক, বা লোপ কৌশলগুলি ব্যবহার করে।

আসলে দুটি একসাথে ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, আপনার একটি কারখানা থাকতে পারে যা আপনার ব্যবসায়ের অবজেক্ট তৈরি করে। এটি অধ্যবসায় মাধ্যমের ভিত্তিতে বিভিন্ন কৌশল ব্যবহার করতে পারে। যদি আপনার ডেটা XML এ স্থানীয়ভাবে সঞ্চয় করা থাকে তবে এটি একটি কৌশল ব্যবহার করবে। যদি ডেটাটি ভিন্ন ডাটাবেসে দূরবর্তী হয় তবে এটি অন্যটি ব্যবহার করবে।


1
Strategy কোনও কৌশল পদ্ধতি বা কোনও নির্দিষ্ট পদ্ধতিতে কোনও ক্রিয়াকলাপ (বা অপারেশনগুলির সেট) সম্পাদনের জন্য ব্যবহার করা হয় it এর অর্থ কী কোনও বস্তুগুলির উপরে ক্রিয়াকলাপ?
ওপিভি

32

কৌশল প্যাটার্ন আপনাকে একটি শ্রেণীর আচরণ বহিরাগতভাবে পরিবর্তন করতে দেয়।

কারখানার নিদর্শন আপনাকে অবজেক্ট তৈরির ব্যবস্থা করতে দেয় enc

গ্যারি একটি দুর্দান্ত পয়েন্ট তোলে। আপনি যদি "কনক্রেশনগুলি" না দিয়ে অ্যাবস্ট্রাকশনগুলিতে কোডিংয়ের নীতিটি ব্যবহার করেন তবে অনেকগুলি নিদর্শন কোনও থিমের পরিবর্তনের মতো দেখতে শুরু করে।


25

টভানফসন যা বলেছিল কেবল তা যুক্ত করতে, অনেকগুলি নিদর্শন বাস্তবায়ন হিসাবে একই দেখায়। এটি হ'ল, আপনি অনেকগুলি এমন একটি ইন্টারফেস তৈরি করেছেন যেখানে সম্ভবত আপনার কোডের আগে এটি ছিল না এবং তারপরে সেই ইন্টারফেসের বাস্তবায়নগুলির একটি গোছা তৈরি করে। পার্থক্যটি তাদের উদ্দেশ্য এবং তারা কীভাবে ব্যবহৃত হয় in


13
  • কারখানা (পদ্ধতি) প্যাটার্ন।

শুধুমাত্র কংক্রিট উদাহরণ তৈরি করুন। বিভিন্ন যুক্তি বিভিন্ন বস্তুর ফলস্বরূপ হতে পারে। এটি যুক্তি ইত্যাদির উপর নির্ভর করে

  • কৌশল প্যাটার্ন।

একটি ক্রিয়া সম্পাদনের জন্য অ্যালগরিদম (পদক্ষেপ) সজ্জিত করুন। সুতরাং আপনি কৌশলটি পরিবর্তন করতে পারেন এবং অন্য একটি অ্যালগরিদম ব্যবহার করতে পারেন।

উভয় দেখতে দেখতে অনেকটা একইরকম, উদ্দেশ্য বরং ভিন্ন, একটি উদ্দেশ্য অন্যটির তৈরি করা একটি ক্রিয়া সম্পাদন করা।

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();
       }
  }

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


আমি মনে করি না আপনি এখানে একটি সঠিক পয়েন্ট করছেন। প্রথমত, এই নিদর্শনগুলির একটি কারণ পলিমারফিজমের পক্ষে শর্তসাপেক্ষ এড়ানো। প্রথমে সরল কারখানা এবং বিমূর্ত কারখানার মধ্যে পার্থক্য অবশ্যই তৈরি করতে হবে। প্রথমটি একটি সাধারণ কারখানা যেখানে আপনার কেবলমাত্র একটি শ্রেণি থাকে যা বস্তু তৈরির জন্য কারখানা হিসাবে কাজ করে, যখন আপনি পরে একটি ইন্টারফেসের সাথে সংযুক্ত হন এবং তারপরে কল করেন বিভিন্ন ইন্টারফেস যা এই ইন্টারফেসটি বাস্তবায়িত করে যা কিছু মানদণ্ডের ভিত্তিতে একই পদ্ধতির বিভিন্ন বাস্তবায়ন বলে মনে করা হয়। (অবিরত)
ইন্টারবয়

4
ঠিক এই ক্ষেত্রে, এটি এক ধরণের কৌশল প্যাটার্নের ফলস্বরূপ, তবে এটি শব্দার্থগতভাবে পৃথক হয় কারণ এটি অপারেশন না করে OBJECT তৈরির জন্য ব্যবহৃত হয়। সুতরাং, মূলত আপনার বিভিন্ন কৌশল ব্যবহার করে অবজেক্ট ক্রিয়েশন রয়েছে।
ইন্টারবয়

2
@ অস্কার রাইজ আপনি কি দয়া করে উভয়কে বর্ণনা করে এমন একটি প্রোগ্রামের সাথে নিজের উত্তর আপডেট করতে পারেন
প্রকাশ পান্ডে

11

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

উদাহরণস্বরূপ, আপনি যদি লিনাক্সের চেহারা এবং অনুভূতিযুক্ত বোতামগুলি চান:

ButtonCreationFactory myFactory = new LinuxButtonCreationFactory();
Button button1 = myFactory.createButton(...);

অথবা আপনি যদি উইন্ডোজ বোতাম চান

ButtonCreationFactory myFactory = new WindowsButtonCreationFactory();
Button button1 = myFactory.createButton(...);

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


10

কারখানা (এবং ফ্যাক্টরিমাথোদ ফ্যাক্টরি দ্বারা ফিরে এসেছে) :

  1. সৃষ্টিশীল নিদর্শন
  2. উত্তরাধিকার ভিত্তিতে
  3. কারখানাটি একটি কারখানা পদ্ধতি (ইন্টারফেস) প্রদান করে যা ঘুরে ফিরে কংক্রিট অবজেক্টকে দেয় returns
  4. আপনি ইন্টারফেস এবং ক্লায়েন্ট (কলার) এর জন্য নতুন কংক্রিট অবজেক্টগুলি প্রতিস্থাপন করতে পারেন সমস্ত কংক্রিট বাস্তবায়ন সম্পর্কে সচেতন হওয়া উচিত নয়
  5. ক্লায়েন্ট সর্বদা কেবল ইন্টারফেস অ্যাক্সেস করে এবং আপনি কারখানা পদ্ধতিতে অবজেক্ট তৈরির বিবরণ গোপন করতে পারেন

এই উইকিপিডিয়া নিবন্ধ এবং javarevisited নিবন্ধটি দেখুন

কৌশল প্যাটার্ন:

  1. এটি একটি আচরণগত প্যাটার্ন
  2. এটি প্রতিনিধি উপর ভিত্তি করে
  3. এটি পদ্ধতির আচরণ পরিবর্তন করে অবজেক্টের সাহসকে পরিবর্তন করে
  4. এটি অ্যালগোরিদমের পরিবারের মধ্যে পরিবর্তন করতে ব্যবহৃত হয়
  5. এটি রান সময় অবজেক্টের আচরণ পরিবর্তন করে

উদাহরণ:

আপনি কোনও নির্দিষ্ট আইটেমের জন্য ছাড়ের কৌশলটি কনফিগার করতে পারেন (এয়ারফেয়ার টিকিট বা শপিংকার্ট আইটেম)। এই উদাহরণস্বরূপ, আপনি জুলাই - ডিসেম্বরের সময় কোনও আইটেমকে 25% ছাড় এবং জুনারি-জুনের সময়ে আইটেমটিতে কোনও ছাড় দেবেন না।

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

কৌশল প্যাটার্ন রিয়েল ওয়ার্ল্ড উদাহরণ

নকশার প্যাটার্নস: ফ্যাক্টরী বনাম কারখানা পদ্ধতি বনাম বিমূর্ত কারখানা


3

অস্কার যা বলেছিল এবং তার কোডের প্রসঙ্গে তা বাড়ানোর জন্য:

গেটকমন্ডটি কারখানা এবং ইউনিক্সকম্যান্ড, উইন্ডোজকম্যান্ড এবং ওএসএক্সকম্যান্ড শ্রেণি কৌশলগুলি Strate


3

সহজ শর্তে কৌশল প্যাটার্ন আচরণের রানটাইম তৈরির বেশি যেখানে আপনি বাস্তবায়নকারী শ্রেণীর সাথে উদ্বিগ্ন নন। অন্যদিকে কারখানাটি কংক্রিট শ্রেণীর উদাহরণের রানটাইম সৃষ্টি এবং বাস্তবায়িত ইন্টারফেস দ্বারা প্রকাশিত কোনও আচরণ (পদ্ধতি) ব্যবহার করা আপনার পক্ষে to


2

কোড বা শ্রেণিবিন্যাসকে দেখে আপনি পার্থক্যটি বুঝতে পারবেন না। জিওএফ নিদর্শনগুলি সঠিকভাবে উপলব্ধি করতে, তাদের উদ্দেশ্যগুলি সন্ধান করুন:

কৌশল: "অ্যালগরিদমগুলির একটি পরিবারকে সংজ্ঞায়িত করুন, প্রত্যেককে আবদ্ধ করুন এবং তাদেরকে বিনিময়যোগ্য করে দিন Strate কৌশলটি অ্যালগরিদমকে যে ক্লায়েন্টগুলি ব্যবহার করে তাদের থেকে আলাদাভাবে আলাদা হতে দেয়" "

কারখানার পদ্ধতি: "কোনও অবজেক্ট তৈরির জন্য একটি ইন্টারফেস সংজ্ঞায়িত করুন তবে কোন শ্রেণিটি ইনস্ট্যান্ট করতে হবে তা সাবক্লাসগুলি সিদ্ধান্ত নিতে দিন F ফ্যাক্টরি পদ্ধতিটি একটি শ্রেণিকে উপক্লাসে স্থগিত করতে দেয়" "

এবং এই দুটি নিদর্শনগুলির মধ্যে অভিপ্রায় এবং পার্থক্য সম্পর্কে এখানে বিস্তৃত ব্যাখ্যা: কারখানা পদ্ধতি এবং কৌশল ডিজাইনের ধরণগুলির মধ্যে পার্থক্য


1

অস্কারের সাথে আমি এই বিষয়টি আঁকতে পারি যে কারখানার বাস্তবায়নের জন্য তাঁর উদাহরণটি দৃ tight়ভাবে একত্রে এবং খুব বন্ধ, এটি আপনার অবদানের কৌশল কৌশল হিসাবে আশ্চর্য হওয়ার কিছু নেই। কারখানার বাস্তবায়ন কোনও নির্দিষ্ট শ্রেণীর ইনস্ট্যান্ট করা হচ্ছে এমন নির্দিষ্ট সংখ্যার উপর নির্ভর করবে না, উদাহরণস্বরূপ:

public Command getCommand( int operatingSystem ) {        
   return commandTable.get(operatingSystem); 
}

...

public class WindowsCommand implements Command {
    ...
    static {
        CommandTable.getInstance().registerCommand(WIN_COMMAND_ID, new WindowsCommand());
    }

}

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


1

কৌশল এবং কারখানা বিভিন্ন উদ্দেশ্য। কৌশলে আপনার কাছে পদ্ধতির সংজ্ঞা দেওয়া আছে, এই প্যাটার্নটি ব্যবহার করে আপনি আচরণটি (অ্যালগোরিদম) বিনিময় করতে পারেন। কারখানায় আসার চারপাশে প্রচুর বৈচিত্র রয়েছে। কিন্তু জিও 4 স্টেটের কারখানার মূল প্যাটার্নটি শিশু শ্রেণিতে অবজেক্ট তৈরির বিষয়টি ছেড়ে দেয়। এখানে কারখানার সাথে আপনি সম্পূর্ণরূপে প্রতিস্থাপন করছেন এমন আচরণটি নয় যা আপনার আগ্রহী in


0

কারখানার প্যাটার্ন হ'ল ক্রিয়েটিভ প্যাটার্ন, যা নির্দিষ্ট বৈশিষ্ট্য (আচরণ) দিয়ে তৈরি হয়। সৃষ্টির পরে রান সময়ে আপনি এর বৈশিষ্ট্যগুলি (আচরণ) পরিবর্তন করেননি। সুতরাং আপনার যদি পৃথক বৈশিষ্ট্য (আচরণ) প্রয়োজন হয় তবে আপনাকে অবজেক্টটি মুছতে হবে এবং প্রয়োজনীয় বৈশিষ্ট্য (আচরণ) সহ নতুন বস্তু তৈরি করতে হবে। যা গুড নয়। কৌশল কৌশল হিসাবে আপনি রান সময় বৈশিষ্ট্য (আচরণ) পরিবর্তন করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.