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


183

আমি একটি ওয়েবসাইট থেকে নকশার নিদর্শনগুলি পড়ছিলাম

সেখানে আমি কারখানা, কারখানার পদ্ধতি এবং বিমূর্ত কারখানা সম্পর্কে পড়েছিলাম তবে তারা এত বিভ্রান্তিকর, সংজ্ঞাটিতে পরিষ্কার নয়। সংজ্ঞা অনুযায়ী

কারখানা - ক্লায়েন্টের কাছে ইনস্ট্যান্টেশন যুক্তিটি প্রকাশ না করে এবং একটি সাধারণ ইন্টারফেসের মাধ্যমে সদ্য নির্মিত বস্তুকে বোঝায় অবজেক্ট তৈরি করে। কারখানা পদ্ধতির একটি সরলীকৃত সংস্করণ

কারখানার পদ্ধতি - অবজেক্ট তৈরির জন্য একটি ইন্টারফেস সংজ্ঞায়িত করে, তবে সাবক্লাসগুলি একটি সাধারণ ইন্টারফেসের মাধ্যমে নতুন শ্রেণীর তৈরি হওয়া অবজেক্টটি ইনস্ট্যান্ট করতে হবে এবং কোন শ্রেণিকে নির্দেশ করবে তা সিদ্ধান্ত নিতে দিন।

অ্যাবস্ট্রাক্ট ফ্যাক্টরি - তাদের ক্লাসগুলি স্পষ্টভাবে উল্লেখ না করে সম্পর্কিত অবজেক্টগুলির পরিবার তৈরির জন্য ইন্টারফেস সরবরাহ করে।

আমি অ্যাবস্ট্রাক্ট ফ্যাক্টরী বনাম কারখানার পদ্ধতি সম্পর্কিত অন্যান্য স্ট্যাকওভারফ্লু থ্রেডগুলিও দেখেছি কিন্তু সেখানে টানা ইউএমএল চিত্রগুলি আমার বুঝতে আরও খারাপ করে তুলেছে।

কেউ দয়া করে আমাকে বলতে পারেন

  1. এই তিনটি নিদর্শন একে অপরের থেকে আলাদা কীভাবে?
  2. কখন ব্যবহার করবেন?
  3. এবং যদি সম্ভব হয় তবে এই নিদর্শনগুলির সাথে সম্পর্কিত কোনও জাভা উদাহরণ?

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

উত্তর:


251

তিনটি কারখানার ধরণ একই কাজ করে: তারা একটি "স্মার্ট কনস্ট্রাক্টর"।

ধরা যাক আপনি দুটি ধরণের ফল তৈরি করতে সক্ষম হতে চান: অ্যাপল এবং কমলা।

কারখানা

কারখানাটি "স্থির" হয়, এতে আপনার কোনও সাবক্লাসিং ছাড়াই কেবল একটি বাস্তবায়ন হয়। এক্ষেত্রে আপনার একটি ক্লাস থাকবে:

class FruitFactory {

  public Apple makeApple() {
    // Code for creating an Apple here.
  }

  public Orange makeOrange() {
    // Code for creating an orange here.
  }

}

ব্যবহারের কেস: কোনও অ্যাপল বা কমলা তৈরি করা কোনওর জন্য নির্মাতাকে পরিচালনা করতে কিছুটা জটিল।

কারখানার পদ্ধতি

ফ্যাক্টরি পদ্ধতিটি সাধারণত যখন আপনি ক্লাসে কিছু জেনেরিক প্রক্রিয়াকরণ করেন তখন ব্যবহৃত হয় তবে আপনি আসলে কোন ধরণের ফল ব্যবহার করেন তা পরিবর্তিত করতে চান want তাই:

abstract class FruitPicker {

  protected abstract Fruit makeFruit();

  public void pickFruit() {
    private final Fruit f = makeFruit(); // The fruit we will work on..
    <bla bla bla>
  }
}

... তারপরে আপনি FruitPicker.pickFruit()সাবক্লাসে কারখানা পদ্ধতি প্রয়োগ করে সাধারণ কার্যকারিতা পুনরায় ব্যবহার করতে পারেন :

class OrangePicker extends FruitPicker {

  @Override
  protected Fruit makeFruit() {
    return new Orange();
  }
}

বিমূর্ত কারখানা

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

interface PlantFactory {

  Plant makePlant();

  Picker makePicker(); 

}

public class AppleFactory implements PlantFactory {
  Plant makePlant() {
    return new Apple();
  }

  Picker makePicker() {
    return new ApplePicker();
  }
}

public class OrangeFactory implements PlantFactory {
  Plant makePlant() {
    return new Orange();
  }

  Picker makePicker() {
    return new OrangePicker();
  }
}

8
+1 এই উত্তরটি যা এই নিদর্শনগুলি সম্পর্কে আমার বোঝার পক্ষে সবচেয়ে বেশি most কলিং কোড (ক্লায়েন্ট) এর উদাহরণগুলি যুক্ত করা কি সহায়তা করবে? যে প্রশ্নটি আমাকে খুব বিরক্ত করে তা হ'ল: আমরা কি বলতে পারি যে অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্নটি কেবলমাত্র ফ্যাক্টরিটি ফ্যাক্টরি পদ্ধতি প্যাটার্ন দিয়ে প্রসারিত (যদি এটি সত্য হয় তবে আমি এই বিষয়টিতে পরিষ্কার)?
ক্রোরাফ

9
এটি অনুসন্ধানের জন্য আমি বছর কাটিয়েছি।
তাজতিটো

এটি একটি দুর্দান্ত ব্যাখ্যা! ধন্যবাদ!
আন্দ্রে আন্দ্রেড

@ আন্দ্রেআন্দ্রদে কীভাবে ফ্যাক্টরি পদ্ধতি প্রয়োগ করবেন ? একটি ছোট কোড প্লেস :) এটি তার ব্যবহার সম্পর্কে আমার সন্দেহ দূর করবে
অর্ণব দত্ত

25
  1. এই তিনটি নিদর্শন একে অপরের থেকে আলাদা কীভাবে?

কারখানা: ক্লায়েন্টের কাছে ইনস্ট্যান্টেশন যুক্তি প্রকাশ না করেই বস্তু তৈরি করে।

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

অ্যাবস্ট্রাক্ট ফ্যাক্টরি: তাদের কংক্রিটের ক্লাস নির্দিষ্ট না করে সম্পর্কিত বা নির্ভরশীল বস্তুর পরিবার তৈরি করার জন্য একটি ইন্টারফেস সরবরাহ করে।

অ্যাবস্ট্র্যাক্ট ফ্যাক্টরি প্যাটার্নটি অন্য শ্রেণিতে অবজেক্ট তৈরির দায়িত্ব অর্পণ করার জন্য রচনাটি ব্যবহার করে যখন কারখানা পদ্ধতি নকশার ধরণটি উত্তরাধিকার ব্যবহার করে এবং অবজেক্ট তৈরি করতে ডাইরেক্ট ক্লাস বা উপ শ্রেণীর উপর নির্ভর করে

  1. কখন ব্যবহার করবেন?

কারখানা: ক্লায়েন্টকে কেবল একটি শ্রেণির প্রয়োজন এবং এটি কোন কংক্রিট বাস্তবায়ন করছে তা যত্ন করে না।

কারখানার পদ্ধতি: ক্লায়েন্ট জানেন না রানটাইমের সময় কী কংক্রিটের ক্লাস তৈরি করা প্রয়োজন, তবে কেবল একটি ক্লাস পেতে চান যা কাজটি করবে।

অ্যাবস্যাক্টফ্যাক্টরি: যখন আপনার সিস্টেমে পণ্যগুলির একাধিক পরিবার তৈরি করতে হয় বা আপনি প্রয়োগের বিশদটি প্রকাশ না করেই পণ্যগুলির একটি গ্রন্থাগার সরবরাহ করতে চান।

অ্যাবস্ট্রাক্ট ফ্যাক্টরি ক্লাসগুলি প্রায়শই ফ্যাক্টরি পদ্ধতিতে প্রয়োগ করা হয়। ফ্যাক্টরি পদ্ধতিগুলি সাধারণত টেম্পলেট পদ্ধতিগুলির মধ্যে ডাকা হয়।

  1. এবং যদি সম্ভব হয় তবে এই নিদর্শনগুলির সাথে সম্পর্কিত কোনও জাভা উদাহরণ?

কারখানা ও কারখানার মেথড

ইন্টেন্ট:

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

ইউএমএল চিত্র :

এখানে চিত্র বর্ণনা লিখুন

পণ্য: এটি কারখানা পদ্ধতিটি তৈরি করে এমন একটি সামগ্রীর একটি ইন্টারফেস সংজ্ঞায়িত করে।

কংক্রিটপ্রডাক্ট: পণ্য ইন্টারফেস প্রয়োগ করে

স্রষ্টা: কারখানা পদ্ধতি ঘোষণা করে

কনক্রিয়েটক্রিটর: একটি কংক্রিটপ্রোডাক্টের উদাহরণ ফেরত দেওয়ার জন্য কারখানার পদ্ধতিটি কার্যকর করে

সমস্যার বিবৃতি: ফ্যাক্টরি পদ্ধতিগুলি ব্যবহার করে গেমসের একটি কারখানা তৈরি করুন যা গেমের ইন্টারফেসটিকে সংজ্ঞায়িত করে।

টুকিটাকি সংকেতলিপি:

কারখানার প্যাটার্ন কারখানার পদ্ধতি কখন ব্যবহার করবেন?

অন্যান্য সৃষ্টিশীল নিদর্শনগুলির সাথে তুলনা:

  1. ডিজাইন ফ্যাক্টরি পদ্ধতিটি (কম জটিল, আরও স্বনির্ধারিত, উপশ্রেণী প্রসারিত) ব্যবহার করে শুরু হয় এবং ডিজাইনার আবিষ্কার করেন যেখানে আরও নমনীয়তার প্রয়োজন হয় আবিষ্কার করায় অ্যাবস্ট্রাক্ট ফ্যাক্টরি, প্রোটোটাইপ বা বিল্ডারের (আরও নমনীয়, আরও জটিল) দিকে বিকশিত হন

  2. অ্যাবস্ট্রাক্ট ফ্যাক্টরি ক্লাসগুলি প্রায়শই কারখানার পদ্ধতিগুলির সাথে প্রয়োগ করা হয় তবে প্রোটোটাইপ ব্যবহার করে সেগুলিও প্রয়োগ করা যেতে পারে

আরও পড়ার জন্য তথ্যসূত্র: উত্স তৈরির নকশা-নিদর্শন


কারখানা পদ্ধতির জন্য, এটি একটি সুপারক্লাস সংজ্ঞায়িত করা উচিত নয়?
টনি লিন

21

কারখানা - জটিল অবজেক্ট তৈরি করতে কারখানা পৃথক করুন।

উদাহরণস্বরূপ: ফলের বিষয়বস্তু তৈরির জন্য ফ্রুটফ্যাক্টরি ক্লাস

class FruitFactory{

public static Fruit getFruit(){...}

}

কারখানার পদ্ধতি - কারখানার জন্য সম্পূর্ণ পৃথক শ্রেণীর পরিবর্তে কেবলমাত্র কারখানার জন্য সেই শ্রেণিতে একটি পদ্ধতি যুক্ত করুন।

উদা:

Calendar.getInstance() (Java's Calendar)

বিমূর্ত কারখানার পদ্ধতি - কারখানার কারখানা

উদাহরণস্বরূপ বলি আমরা কম্পিউটারের যন্ত্রাংশের জন্য কারখানা তৈরি করতে চাই। তাই ল্যাপটপ, ডেস্কটপ, সার্ভারের মতো বিভিন্ন ধরণের কম্পিউটার রয়েছে।

সুতরাং প্রতিটি কম্পটার টাইপ জন্য আমাদের কারখানা প্রয়োজন। সুতরাং আমরা নীচের মতো কারখানার একটি হাইলেভেল কারখানা তৈরি করি

ComputerTypeAbstractFactory.getComputerPartFactory(String computerType) ---> This will return PartFactory which can be one of these ServerPartFactory, LaptopPartFactory, DesktopPartFactory.

এখন এই 3 নিজেই আবার কারখানা। (আপনি নিজেই পার্টফ্যাক্টরির সাথেই কাজ করবেন তবে হুডের নীচে আপনি বিমূর্ত কারখানায় যা সরবরাহ করেছেন তার উপর ভিত্তি করে পৃথক বাস্তবায়ন হবে)

  Interface-> PartFactory. getComputerPart(String s), 
Implementations -> ServerPartFactory, LaptopPartFactory, DesktopPartFactory.

Usage:
new ComputerTypeAbstractFactory().getFactory(“Laptop”).getComputerPart(“RAM”)

সম্পাদনা: মন্তব্যে আপত্তি অনুযায়ী অ্যাবস্ট্রাক্ট ফ্যাক্টরির জন্য সঠিক ইন্টারফেস সরবরাহ করতে সম্পাদিত।


1
এর পিছনে ধারণাটি হ'ল ComputerFactoryআপনার একটি সাধারণ তৈরি ইন্টারফেস ( getScreen(); getKeyboard(); getDiskdrive(); ...) রয়েছে, কম্পিউটারের প্রতি ইন্টারফেসটি আপনার পরামর্শ অনুসারে নয়। আপনি যদি একই বিবৃতিতে একই শব্দটি দু'বার ব্যবহার করেন তবে আপনি কোনও ডিজাইনের সমস্যা ঘ্রাণ নিতে পারেন: ল্যাপটপ ফ্যাক্টরি get ল্যাপটপ অংশ ()।
xtofl

না না না, ঠিক নিজেরাই কোডে যাবেন না। এটি ছিল বোঝার জন্য একটি অ্যানোলজি। আপনি যদি ইন্টারফেসগুলির সাথে সঠিক উদাহরণ চান, এটি এখানে। অবজেক্টস: ইন্টারফেস -> কম্পিউটারপার্ট, বাস্তবায়ন -> র‌্যাম, এইচডিডি, প্রসেসর কারখানা: ইন্টারফেস-> পার্টফ্যাক্টরি। getComputerPart (স্ট্রিং গুলি), বাস্তবায়ন -> সার্ভার পার্টফ্যাক্টরি, ল্যাপটপ পার্টফ্যাক্টরি, ডেস্কটপ পার্টফ্যাকারি। সারাংশ কারখানার: ComputerType.getPartFactory ( "স্ট্রিং গুলি") ব্যবহার:।। নতুন ComputerType () getFactory ( "ল্যাপটপ") getComputerPart ( "র্যাম")
রবি কে

2
আপনার উদ্বেগকে যত্ন নেওয়ার জন্য আমার কাছে আপডেট উত্তর আছে। প্রকৃতপক্ষে বিমূর্ত কারখানাটি কেবলমাত্র কারখানার উপদেষ্টা ছাড়া কিছুই নয়। আমি পূর্বের উদাহরণটি কেবল রেফারেন্সের জন্য দিয়েছি (ধরে নিলাম পাঠকরা প্রকৃত বাস্তবায়নকালে ইন্টারফেসের যত্ন নেবেন)। তবুও জানার জন্য ধন্যবাদ। এটি উন্নত করা সর্বদা ভাল। :)
রবি কে

না abstract Factoryকারখানার কারখানা নয় ... এটি এমন abstract classবা একটি interfaceঅবজেক্ট তৈরি করতে সক্ষম যা বিভিন্ন কংক্রিট কারখানার সাথে প্রয়োগ / বাড়ানো হবে। কোড বিশদ জন্য গৃহীত উত্তর দেখুন। এবং দয়া করে আপনার উত্তর সরান বা সম্পাদনা করুন।
জুলিয়েন__ 21

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

11

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

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

এখন, আপনি যদি আপনার পোর্টফোলিওতে অন্য কোনও ওয়েবসাইট যুক্ত করার কথা ভাবেন, এবং আপনি বিশ্বাস করেন যে একই কোরটি ব্যবহার করা হবে, উদাহরণস্বরূপ, একটি কার্পুলিং ওয়েবসাইট, যা এখন ক্যাব অনুসন্ধান করে এবং অনলাইনে অর্থ প্রদান করে, আপনি আপনার মূল অংশে একটি বিমূর্ত কারখানা ব্যবহার করতে পারেন। আপনি কেবল ক্যাব এবং কার্পুলের আরও একটি কারখানায় স্ন্যাপ করতে পারেন।

উভয় কারখানার একে অপরের সাথে কোনও সম্পর্ক নেই, তাই এগুলিকে বিভিন্ন কারখানায় রাখার জন্য এটি একটি ভাল নকশা।

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


3

এই উত্তরের জন্য, আমি "গ্যাং অফ ফোর" বইটি উল্লেখ করি।

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

বইটিতে কেবল "বিমূর্ত কারখানা" এবং "কারখানার পদ্ধতি" এর সংজ্ঞা রয়েছে।

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

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

অ্যাবস্ট্রাক্ট ফ্যাক্টরি (জিওএফ) : সম্পর্কিত বা নির্ভরশীল জিনিসের পরিবারগুলি তাদের কংক্রিটের ক্লাস নির্দিষ্ট না করে তৈরি করার জন্য একটি ইন্টারফেস সরবরাহ করুন।

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


2
AbstractProductA, A1 and A2 both implementing the AbstractProductA
AbstractProductB, B1 and B2 both implementing the AbstractProductB

interface Factory {
    AbstractProductA getProductA(); //Factory Method - generate A1/A2
}

কারখানার পদ্ধতি ব্যবহার করে ব্যবহারকারী অ্যাবস্ট্রাক্ট প্রোডাক্টকের A1 বা A2 তৈরি করতে সক্ষম হন।

interface AbstractFactory {
    AbstractProductA getProductA(); //Factory Method
    AbstractProductB getProductB(); //Factory Method
}

তবে অ্যাবস্ট্রাক্ট ফ্যাক্টরিতে 1 টিরও বেশি ফ্যাক্টরি পদ্ধতি রয়েছে (উদা: 2 ফ্যাক্টরি পদ্ধতি), সেই ফ্যাক্টরি পদ্ধতিগুলি ব্যবহার করে এটি অবজেক্ট / সম্পর্কিত সামগ্রীর সেট তৈরি করবে। অ্যাবস্ট্রাক্ট ফ্যাক্টরি ব্যবহার করে ব্যবহারকারী এস্ট্রাক্টপ্রডাক্টএ, অ্যাবস্ট্রাক্ট প্রোডাক্ট বি এর এ 1, বি 1 অবজেক্ট তৈরি করতে সক্ষম হবেন


0

ডিজাইন প্যাটার্নস: পুনরায় ব্যবহারযোগ্য বস্তু-ওরিয়েন্টেড সফ্টওয়্যার এর উপাদানগুলির মূল বইটি কেউ উদ্ধৃত করেনি , যা "ক্রিয়েটিয়াল প্যাটার্নগুলির আলোচনা" (জোর দেওয়া খনি) বিভাগের প্রথম দুটি অনুচ্ছেদে উত্তর দেয়:

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

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

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