কারখানা এবং বিমূর্ত কারখানার নকশার প্যাটার্নগুলির মধ্যে মূল পার্থক্য কী? [বন্ধ]


483

কারখানা এবং বিমূর্ত কারখানার প্যাটার্নগুলির মধ্যে মূল পার্থক্য কী?



1
মূল পার্থক্য হ'ল ফ্যাক্টরি পদ্ধতি উত্তরাধিকার ব্যবহার করে (দিকনির্দেশটি উল্লম্ব উদাহরণস্বরূপ createThing()) এবং অ্যাবস্ট্রাক্ট ফ্যাক্টরিটি রচনা ব্যবহার করে (দিকনির্দেশটি অনুভূমিক উদাহরণস্বরূপ getFactory().createThing())
ডেভিড জেমস

1
এই প্রশ্নটি এর উত্তরদাতাদের কিছু মনে করে তা নয়। টেঙ্গিজের উত্তরটি মিস করবেন না , যা কারখানা, বিমূর্ত কারখানা এবং কারখানার পদ্ধতি তিনটি স্বতন্ত্র পদকে সংজ্ঞায়িত করে।
ডেভ শোয়েসগুথ

উত্তর:


412

কারখানার প্যাটার্ন সঙ্গে, আপনি (বাস্তবায়নের দৃষ্টান্ত উত্পাদন Apple, Banana, Cherry, বলে - একটি বিশেষ ইন্টারফেসের, ইত্যাদি) IFruit

অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্ন সহ, আপনি যে কারও জন্য তাদের নিজস্ব কারখানা সরবরাহের জন্য একটি উপায় সরবরাহ করেন। এটি আপনার গুদামকে ফল বা রস সম্পর্কে কিছু জানার প্রয়োজন ছাড়াই আপনার গুদামকে হয় একটি IFruitFactoryবা একটি হতে দেয় IJuiceFactory


5
@ এসপিআই আমি মনে করি আপনি আমাকে ভুল বুঝেছেন; কারখানার নিজেই বাস্তবায়ন করার দরকার নেই IFruit- এটা যা বাস্তবায়ন instantiates IFruit। অবশ্যই এটি কোনও নির্দিষ্ট ইন্টারফেস বাস্তবায়িত করে এমন জিনিসগুলির উদাহরণ তৈরি করার দরকার নেই , তবে আপনার যদি এমন কোনও ফ্যাক্টরি থাকে যা একে অপরের সাথে সম্পূর্ণ সম্পর্কযুক্ত নয় এমন উত্পাদন করে।
জন Feminella

75
কারখানা যা কারখানা তৈরি করে। আমাদের আরও গভীর হতে হবে ...
পল আনেকোভ

11
এর চেয়ে বেশি ভুলের কথা কখনও শুনিনি। বিমূর্ত কারখানার ইন্টারফেস উত্পাদন করে এমন কোনও কারখানাকে আপনি কী বলবেন (আইএবস্ট্রাকফ্যাক্টরি)? - আহ আমি দেখছি, এটি অ্যাবস্ট্রাক্ট অ্যাবস্ট্রাক্ট
ফ্যাক্টরি

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

9
এই উত্তর এটি সহজ সরল ভুল! এই জিওএফ বইয়ের মতে , একটি বিমূর্ত কারখানাটি একটি ফ্যাক্টরি অবজেক্ট যা কারখানার ইন্টারফেস প্রয়োগ করে, যাতে কংক্রিটের কারখানাটি অন্য সাবক্লাসের জন্য অদলবদল করা যায়। কারখানা তৈরির সাথে এর কোনও যোগসূত্র নেই। দয়া করে এই উত্তরটি সরান, এটি জনগণকে বিভ্রান্ত ও বিভ্রান্ত করছে!
Lii

142

এই তথ্যের উত্স থেকে নেওয়া: http://java.dzone.com/news/intro-design-patterns-abstract

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

একটি বিমূর্ত কারখানার পদ্ধতিগুলি কারখানার পদ্ধতি হিসাবে প্রয়োগ করা হয়। অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্ন এবং কারখানার পদ্ধতি প্যাটার্ন উভয়ই অ্যাবস্ট্রাক্ট প্রকার এবং কারখানার মাধ্যমে ক্লায়েন্ট সিস্টেমকে প্রকৃত বাস্তবায়ন ক্লাস থেকে ডেসপল করে। কারখানার পদ্ধতি উত্তরাধিকারের মাধ্যমে অবজেক্ট তৈরি করে যেখানে অ্যাবস্ট্রাক্ট ফ্যাক্টরি কম্পোজিশনের মাধ্যমে অবজেক্ট তৈরি করে।

অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্নটিতে একটি অ্যাবস্ট্রাকফ্যাক্টরি, কংক্রিটফ্যাক্টরি, অ্যাবস্ট্রাক্ট প্রোডাক্ট, কংক্রিটপ্রোডাক্ট এবং ক্লায়েন্ট রয়েছে।

কীভাবে বাস্তবায়ন করা যায়

অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্নটি ফ্যাক্টরি পদ্ধতি প্যাটার্ন, প্রোটোটাইপ প্যাটার্ন বা সিঙ্গলটন প্যাটার্ন ব্যবহার করে প্রয়োগ করা যেতে পারে। কংক্রিটফ্যাক্টরি অবজেক্টটি সিঙ্গেলটন হিসাবে প্রয়োগ করা যেতে পারে কারণ কংক্রিটফ্যাক্টরি অবজেক্টের কেবলমাত্র একটি উদাহরণ প্রয়োজন।

কারখানার পদ্ধতি প্যাটার্নটি অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্নের একটি সরল সংস্করণ। কারখানার পদ্ধতির প্যাটার্নটি এমন একটি পণ্য যা একটি পরিবারের অন্তর্ভুক্ত তা তৈরি করার জন্য দায়বদ্ধ, আবার অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্ন একাধিক পরিবারের সাথে কাজ করে।

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

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

কারখানাটি যখন ব্যবহার করে কোনও নির্দিষ্ট পণ্য থেকে ক্লায়েন্টকে ডিকুয়াল করার প্রয়োজন হয় তখন কারখানা পদ্ধতি পদ্ধতিটি ব্যবহার করুন। কোনও পণ্যের উদাহরণ তৈরি এবং কনফিগার করার দায়বদ্ধতার কোনও ক্লায়েন্টকে মুক্তি দিতে কারখানার পদ্ধতিটি ব্যবহার করুন।

বিমূর্ত কারখানার প্যাটার্নটি কখন ব্যবহার করবেন

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

উদাহরণ:

বিমূর্ত কারখানার উদাহরণ 1

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

বিমূর্ত কারখানার উদাহরণ 2:

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

কারখানার পদ্ধতির উদাহরণ:

খেলনা সংস্থাটি নির্মাতার সাথে সামঞ্জস্য করে, যেহেতু এটি কারখানাটি পণ্য সামগ্রী তৈরি করতে ব্যবহার করতে পারে। খেলনা সংস্থার বিভাগ যা একটি নির্দিষ্ট ধরণের খেলনা (ঘোড়া বা গাড়ি) উত্পাদন করে তা কংক্রিটক্রিটরের সাথে মিলে যায়।


6
বিমূর্ত কারখানা এবং কারখানা পদ্ধতি ব্যাখ্যা করার জন্য ধন্যবাদ। আমি বুঝতে পারি না যে আমরা কোথায় বস্তু তৈরির জন্য বিমূর্ত কারখানায় রচনাটি ব্যবহার করি এবং কারখানা পদ্ধতিতে আমরা উত্তরাধিকারটি কোথায় ব্যবহার করি। আপনি যদি এগুলি ব্যাখ্যা করতে কিছু কোড পোস্ট করেন তবে এটি খুব কার্যকর হবে। আপনাকে অনেক ধন্যবাদ. আপনার কোডের জন্য অপেক্ষা করছি আবার ধন্যবাদ.
হর্ষ

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


রচনা উদাহরণ: পাবলিক ক্লাস ক্লায়েন্ট {অ্যাবস্ট্রাক্ট প্রোডাক্ট পণ্য; বিমূর্তপ্রাক্টঅ্যাকসেসরিজ আনুষাঙ্গিক; পাবলিক ক্লায়েন্ট (অ্যাবস্ট্রাকফ্যাক্টরি ফ্যাক্টরি) {অ্যাবস্ট্রাক্ট প্রোডাক্ট প্রোডাক্ট = কারখানা। } সর্বজনীন শূন্য রান ()। product.print (); আনুষাঙ্গিকগুলি = product.getAccessories (); }}
অসীম গাফফার

এই দুটি নিদর্শনগুলির মধ্যে কোনটি ব্যবহৃত হয়েছিল তা কোডে সনাক্ত করা সম্ভব?
ওয়ার্লক

98

কারখানার প্যাটার্ন: কারখানাটি আইপ্রডাক্ট-বাস্তবায়ন উত্পাদন করে

অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্ন: একটি কারখানা-কারখানা আইফ্যাক্টরিগুলি তৈরি করে, যার ফলে আইড্রডাক্টস উত্পাদন হয় :)

[মন্তব্য অনুসারে আপডেট করুন]
আমি আগে যা লিখেছি তা কমপক্ষে উইকিপিডিয়া অনুযায়ী সঠিক নয় । একটি বিমূর্ত কারখানাটি কেবল একটি কারখানার ইন্টারফেস। এটির সাহায্যে আপনি আপনার কারখানাগুলিকে রানটাইমে স্যুইচ করতে পারেন, বিভিন্ন প্রসঙ্গে বিভিন্ন কারখানার অনুমতি দিতে। উদাহরণগুলি বিভিন্ন ওএস, এসকিউএল সরবরাহকারী, মিডলওয়্যার-ড্রাইভার ইত্যাদির জন্য বিভিন্ন কারখানা হতে পারে ..


4
নিস! অ্যাবস্ট্রাক্ট ফ্যাক্টরি ফ্যাক্টরি পদ্ধতির একটি সেট এটি কি সঠিক?
ওয়ারলক

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

5
যদি আমি সঠিকভাবে বুঝতে পারি তবে এই উত্তরটি বোঝা যাচ্ছে যে অ্যাবস্ট্রাক্ট ফ্যাক্টরি সর্বদা আরও আইএফ্যাক্টরিগুলি তৈরি করে , যা পরিবর্তে আইপিড্রাক্টস তৈরি করতে ব্যবহৃত হতে পারে। জিওএফ-তে উপস্থাপনাটি এটি সমর্থন করার জন্য আমার কাছে উপস্থিত হয় না এবং বাস্তবে এটি বিপরীতে: একটি অ্যাবস্ট্রাক্ট ফ্যাক্টরির একটি উদাহরণ সরাসরি আইড্রডাক্টস নিজেই উত্পাদন করে। অন্য কথায়, একটি জিওএফ অ্যাবস্ট্রাক্ট কারখানা "ফ্যাক্টরি-কারখানা" নয় (বা বরং প্রয়োজন হবে না )।
এসএসজে_জিজেড

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

1
এই উত্তর এটি সহজ সরল ভুল! এই জিওএফ বইয়ের মতে , একটি বিমূর্ত কারখানাটি একটি ফ্যাক্টরি অবজেক্ট যা কারখানার ইন্টারফেস প্রয়োগ করে, যাতে কংক্রিটের কারখানাটি অন্য সাবক্লাসের জন্য অদলবদল করা যায়। কারখানা তৈরির সাথে এর কোনও যোগসূত্র নেই। দয়া করে এই উত্তরটি সরান, এটি জনগণকে বিভ্রান্ত ও বিভ্রান্ত করছে!
লী

42

বিমূর্ত কারখানা প্যাটার্ন

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

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

  • আসলে, অর্পিত বস্তুটি ঘন ঘন ইনস্ট্যান্টেশন সম্পাদনের জন্য কারখানার পদ্ধতি ব্যবহার করে!

কারখানার প্যাটার্ন

  • কারখানা নিদর্শন সৃজনশীল নিদর্শন উদাহরণ

  • সৃষ্টিশীল নিদর্শনগুলি বস্তুর তাত্ক্ষণিক প্রক্রিয়াটিকে বিমূর্ত করে। তারা কীভাবে অবজেক্ট তৈরি করা হয় তা গোপন করে এবং সামগ্রিক সিস্টেমটিকে কীভাবে তার অবজেক্টগুলি তৈরি এবং সংমিশ্রণ করা যায় তা স্বাধীন করতে সহায়তা করে।

  • শ্রেণীর ক্রিয়েটিভ প্যাটার্নগুলি অবজেক্টটি কারখানার পদ্ধতিটি ইনস্ট্যান্ট করার সিদ্ধান্ত নেওয়ার জন্য উত্তরাধিকারের ব্যবহারের দিকে মনোনিবেশ করে

  • অবজেক্ট সৃজনশীল নিদর্শনগুলি অন্য কোনও বস্তুর অ্যাবস্ট্রাক্ট ফ্যাক্টরিতে ইনস্ট্যান্টেশনের প্রতিনিধিটির দিকে মনোনিবেশ করে

তথ্যসূত্র: কারখানা বনাম বিমূর্ত কারখানা


3
রেফারেন্স লিঙ্কটি মারা গেছে
এমকোবিট

39

কারখানার পদ্ধতি: আপনার একটি কারখানা রয়েছে যা একটি নির্দিষ্ট বেস শ্রেণি থেকে প্রাপ্ত বস্তু তৈরি করে

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


6
এটি গৃহীত উত্তরের একটি সদৃশ এবং এটিও সমানভাবে ভুল।
jaco0646

36

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

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


36

প্রাথমিক পার্থক্য:

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

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

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

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

অডসাইন নিবন্ধগুলি থেকে :

কারখানা শ্রেণীর চিত্র:

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

উদাহরণ: স্ট্যাটিকফ্যাক্টরি

 public class ShapeFactory {

   //use getShape method to get object of type shape 
   public static Shape getShape(String shapeType){
      if(shapeType == null){
         return null;
      }     
      if(shapeType.equalsIgnoreCase("CIRCLE")){
         return new Circle();

      } else if(shapeType.equalsIgnoreCase("RECTANGLE")){
         return new Rectangle();

      } else if(shapeType.equalsIgnoreCase("SQUARE")){
         return new Square();
      }

      return null;
   }
}

অ স্ট্যাটিক কারখানা বাস্তবায়নকারী ফ্যাক্টরিমাথোদ উদাহরণটি এই পোস্টে পাওয়া যায়:

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

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

কারখানা পদ্ধতি শ্রেণি দিগরাম:

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

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

জোন থেকে অ্যাবস্ট্রাক্ট ফ্যাক্টরি ক্লাস ডায়াগ্রাম

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

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

উপরের নিবন্ধগুলিতে উত্স কোড উদাহরণগুলি ধারণাগুলি পরিষ্কারভাবে বুঝতে ভাল।

কোড উদাহরণ সহ এসই প্রশ্ন:

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

পার্থক্য:

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

অন্যান্য দরকারী নিবন্ধ:

কারখানার_ উত্স তৈরির থেকে অর্থ

abstract_factory sourcemaking থেকে

জারদেব থেকে বিমূর্ত-কারখানা-ডিজাইন-প্যাটার্ন


21

অ্যাবস্ট্রাক্ট ফ্যাক্টরির উদাহরণ / পরিস্থিতি

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

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

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

আমি যদি এই ওয়েবসাইটটির মতো কিছু তৈরির সুযোগ পাই তবে আমি অবশ্যই বিমূর্ত ফ্যাক্টরি প্যাটার্নটি বিবেচনা করব।

বিমূর্ত পণ্য: বিজ্ঞাপন ফলক, মেনু, ইউআই চিত্রকর।
বিমূর্ত কারখানা: ওয়েব স্টোর ব্যবহারকারীর অভিজ্ঞতা
কনক্রিয়েট কারখানা: প্রিমিয়াম ব্যবহারকারীর অভিজ্ঞতা, সোনার ব্যবহারকারীর অভিজ্ঞতা, সাধারণ ব্যবহারকারীর অভিজ্ঞতা।


অ্যাবস্ট্র্যাক্ট ফ্যাক্টরির সুন্দর পরিস্থিতিগুলি কিন্তু আপনি সত্যই প্রশ্নের উত্তর দেননি, কারখানা এবং বিমূর্ত কারখানার মধ্যে পার্থক্য কী।
আদেলিন

20

অনেকে হয়ত অবাক বোধ করবেন তবে এই প্রশ্নটি ভুল । যদি আপনি একটি সাক্ষাত্কারের সময় এই প্রশ্নটি শুনতে পান তবে আপনাকে কোথায় বিভ্রান্তি রয়েছে তা ইন্টারভিউয়ারকে বুঝতে সহায়তা করা উচিত।

আসুন শুরু করা যাক যে কোনও কংক্রিট প্যাটার্ন নেই যা কেবল "কারখানা" বলা হয় is এমন প্যাটার্ন রয়েছে যা "অ্যাবস্ট্রাক্ট ফ্যাক্টরি" নামে পরিচিত, এবং এমন প্যাটার্ন রয়েছে যা "ফ্যাক্টরি পদ্ধতি" নামে পরিচিত।

তাহলে, "ফ্যাক্টরি" এর অর্থ কী? নিম্নলিখিতগুলির মধ্যে একটি (সমস্ত সঠিক হিসাবে বিবেচনা করা যেতে পারে, উল্লেখের ক্ষেত্রের উপর নির্ভর করে):

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

এবং, দুর্ভাগ্যক্রমে , অনেক লোক "কারখানা" ব্যবহার করে অন্য ধরণের কারখানা বোঝাতে, যা কারখানা বা কারখানা তৈরি করে (বা তাদের ইন্টারফেস)। তাদের তত্ত্বের ভিত্তিতে:

প্রোডাক্ট আইপিপ্রডাক্ট প্রয়োগ করে, যা কারখানা দ্বারা নির্মিত, যা আইফ্যাক্টরি প্রয়োগ করে, যা অ্যাস্ট্রাক্টফ্যাক্ট্রি দ্বারা নির্মিত।

এটি কত নির্বোধ তা বুঝতে, আসুন আমাদের সমীকরণটি চালিয়ে যান:

অ্যাবস্ট্রাকফ্যাক্ট্রি আইএবস্ট্র্যাক্ট ফ্যাক্টরি প্রয়োগ করে, যা তৈরি করেছে ... AbstractAbstractFactory ???

আমি আশা করি আপনি বিষয়টি দেখুন বিভ্রান্ত হবেন না, এবং দয়া করে এমন জিনিস আবিষ্কার করবেন না যা কারণে অস্তিত্বহীন।

-

PS : পণ্যগুলির জন্য কারখানা অ্যাবস্ট্রাকফ্যাক্টরি এবং অ্যাবস্ট্রাক্ট ফ্যাক্টরিগুলির জন্য কারখানাটি অ্যাবস্ট্রাকফ্যাক্টরীর আরও একটি উদাহরণ হতে পারে।


অ্যাবস্ট্রাকফ্যাক্টরি যা নির্দিষ্ট অবজেক্ট তৈরি করে অন্যান্য অ্যাবস্ট্রাকফ্যাক্টরি তৈরি করে তার থেকে আমি কীভাবে আলাদা করতে পারি? জেনেরিকএবস্ট্র্যাক্টরি? নাকি অ্যাবস্ট্র্যাক্ট ফ্যাক্টরি?
অ্যান্ড্রু

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

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

3
পাঠযোগ্য কোড হ'ল উদ্দেশ্য উদ্ঘাটনকারী কোড। ক্লাসের নামকরণের সময় আপনার খুব বেশি নিদর্শন উল্লেখ করা উচিত নয়, যদি না খুব প্রয়োজন। উদাহরণস্বরূপ, যদি আপনার কোনও বিমূর্ত কারখানা থাকে যা বিভিন্ন ট্রান্সপোর্টগুলি তৈরি করে, সম্ভবত এটিকে ট্রান্সপোর্টক্রিটর বা ট্রান্সপোর্টফ্যাক্ট্রি বা এমনকি ট্রান্সপোর্টম্যানুচারারও বলতে পারেন। এবং তারপরে, আপনার যদি এই কারখানার কারখানা থাকে, আপনি যাকে যাই হোক না কেন এটি বলতে পারেন whoever যে কেউ নতুন নির্মাতাকে খোলে। হতে পারে যে প্রস্তুতকারক পরিচালনা করা যেতে পারে? মূলত, আপনার ব্যবসায় তাদের কল হিসাবে জিনিসগুলির নাম দিন এবং তারা কোন প্যাটার্নগুলি প্রয়োগ করে তার ভিত্তিতে নয়।
টেঙ্গিজ

16
//Abstract factory - Provides interface to create factory of related products
interface PizzaIngredientsFactory{    
   public Dough createDough(); //Will return you family of Dough
   public Clam createClam();   //Will return you family of Clam
   public Sauce createSauce(); //Will return you family of Sauce
}

class NYPizzaIngredientsFactory implements PizzaIngredientsFactory{

   @Override
   public Dough createDough(){
      //create the concrete dough instance that NY uses
      return doughInstance;
   }

   //override other methods
} 

পাঠ্য পুস্তকের সংজ্ঞা ইতিমধ্যে অন্যান্য উত্তর সরবরাহ করেছে। আমি ভেবেছিলাম আমি এর একটি উদাহরণও সরবরাহ করব।

সুতরাং এখানে PizzaIngredientsFactoryএকটি বিমূর্ত কারখানা এটি সম্পর্কিত পণ্যের পরিবার তৈরি করার পদ্ধতি সরবরাহ করে।

নোট করুন যে বিমূর্ত কারখানার প্রতিটি পদ্ধতি নিজেই একটি কারখানা পদ্ধতি । মতcreateDough() নিজেই একটি কারখানার পদ্ধতি যাঁর কংক্রিট বাস্তবায়নগুলি উপশ্রেণী দ্বারা সরবরাহ করা হবে NYPizzaIngredientsFactory। সুতরাং এটি প্রতিটি পৃথক অবস্থান ব্যবহার করে তাদের অবস্থানের সাথে সম্পর্কিত কংক্রিট উপাদানগুলির উদাহরণ তৈরি করতে পারে।

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

কংক্রিট বাস্তবায়নের উদাহরণ সরবরাহ করে

উদাহরণে:
- createDough()- ময়দার জন্য কংক্রিট বাস্তবায়ন সরবরাহ করে। সুতরাং এটি একটি কারখানা পদ্ধতি

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

সম্পর্কিত অবজেক্টগুলির পরিবার তৈরি করতে ইন্টারফেস সরবরাহ করে

উদাহরণে:
- PizzaIngredientsFactoryএকটি বিমূর্ত কারখানা হিসাবে এটা পছন্দ বস্তুর একটি সম্পর্কিত সেট তৈরি করার মঞ্জুরি দেয় Dough, Clams,Sauce । বস্তুর প্রতিটি পরিবার তৈরির জন্য এটি একটি কারখানার পদ্ধতি সরবরাহ করে।

মাথা প্রথম নকশা নিদর্শন থেকে উদাহরণ


5

জন এর উত্তরটি অবদানের জন্য আমার কিছু বিষয় রয়েছে:

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

"কারখানার পদ্ধতি" সঙ্গে (কারণ শুধু "ফ্যাক্টরী" দ্ব্যর্থক), আপনি বাস্তবায়ন (উত্পাদন Lemon, Orangeবলুন, - একটি নির্দিষ্ট ইন্টারফেসের, ইত্যাদি) IFruit। এই কারখানা কল করা যেতে পারে CitricFruitFactory

তবে এখন আপনি অন্য ধরণের ফল তৈরি করতে চান যা সিট্রিকফ্রুটফ্যাক্টরি তৈরি করতে সক্ষম নয়। হয়তো কোড CitricFruitFactoryযদি আপনি একটি তৈরি অর্থে দেখা যায় না হবেStrawberry এটা (স্ট্রবেরি একটি সাইট্রিক ফল নয়!)।

যদি আপনি একটি নতুন ফ্যাক্টরি নামক তৈরী করতে পারে তাই RedFruitFactoryযে উত্পাদন করে Strawberry, Raspberryইত্যাদি

জন ফেমেনেলা যেমন বলেছিলেন: "অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্নের সাহায্যে আপনি একটি নির্দিষ্ট কারখানার ইন্টারফেসের বাস্তবায়ন উত্পাদন করেন - যেমন, IFruitFactoryতাদের প্রত্যেকেই জানেন যে কীভাবে বিভিন্ন ধরণের ফল তৈরি করা যায়।"

যে বাস্তবায়ন IFruitFactoryহয় CitricFruitFactoryএবং RedFruitFactory!


4

আমার উত্স: StackOverflow, tutorialspoint.com, programmers.stackexchange.comএবং CodeProject.com


Factory Method (বলা Factory ) একটি Interfaceবাস্তবায়নের decouple ক্লায়েন্ট জন্য । নমুনার জন্য আমাদের Shapeদুটি Circleএবং Squareবাস্তবায়ন সহ একটি ইন্টারফেস রয়েছে । আমরা একটি কারখানার শ্রেণি যেমন একটি নির্ধারক প্যারামিটার Typeএবং Shapeইন্টারফেসের নতুন সম্পর্কিত প্রয়োগের সাথে একটি কারখানার পদ্ধতি সংজ্ঞায়িত করেছি ।


Abstract Factoryবেশ কয়েকটি ফ্যাক্টরি পদ্ধতি বা বেশ কয়েকটি কারখানার বাস্তবায়ন দ্বারা কারখানা ইন্টারফেস রয়েছে। পরবর্তী উপরের নমুনার জন্য আমাদের একটিColor দুটি Redএবং Yellowবাস্তবায়ন সহ ইন্টারফেস রয়েছে । আমরা ShapeColorFactoryদুটি RedCircleFactoryএবং এর সাথে একটি ইন্টারফেস সংজ্ঞায়িত করেছি YellowSquareFactory। এই ধারণাটি ব্যাখ্যা করার জন্য নিম্নলিখিত কোড:

interface ShapeColorFactory
{
    public Shape getShape();
    public Color getColor();
}

class RedCircleFactory implements ShapeColorFactory
{
    @Override
    public Shape getShape() {
        return new Circle();
    }

    @Override
    public Color getColor() {
        return new Red();
    }
}
class YellowSquareFactory implements ShapeColorFactory
{
    @Override
    public Shape getShape() {
        return new Square();
    }

    @Override
    public Color getColor() {
        return new Yellow();
    }
} 

এখানে পার্থক্য FactoryMethod এবংAbstractFactoryFactory Methodহিসাবে কেবল একটি ইন্টারফেসের একটি কংক্রিট ক্লাস Abstract Factoryফিরিয়ে দিন তবে ফিরে আসুন factory of factory। অন্য কথায় Abstract Factoryইন্টারফেসের একটি সিরিজের বিভিন্ন সংযুক্ত ফেরত।


আমি আমার ব্যাখ্যা দরকারী আশা করি।


3

এই কারখানাগুলিতে প্রধান পার্থক্য হ'ল আপনি যখন কারখানার সাথে কী করতে চান এবং কখন আপনি এটি ব্যবহার করতে চান।

কখনও কখনও, যখন আপনি আইওসি করছেন (নিয়ন্ত্রণের বিপরীত উদাহরণস্বরূপ কনস্ট্রাক্টর ইঞ্জেকশন), আপনি জানেন যে আপনি শক্ত বস্তু তৈরি করতে পারেন। ফলের উপরের উদাহরণে উল্লিখিত হিসাবে, আপনি যদি ফলের বস্তু তৈরি করতে প্রস্তুত হন তবে আপনি সাধারণ কারখানার প্যাটার্ন ব্যবহার করতে পারেন

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

সুতরাং, আমি বস্তুর আজীবন এবং সৃষ্টি সম্পর্কে এটিও ভাবি।


3

উভয় Factory Methodএবং Abstract Factoryক্লায়েন্টদের কংক্রিট ধরণের থেকে decoupled রাখুন। উভয়ই বস্তু তৈরি করে তবে Factoryপদ্ধতিটি উত্তরাধিকার ব্যবহার করেAbstract Factory ব্যবহার করে রচনা ব্যবহার করে।

Factory Methodকংক্রিট বস্তু (পণ্য) যেহেতু তৈরি করতে উপশ্রেণী মধ্যে উত্তরাধিকারসূত্রে হয়Abstract Factory সংশ্লিষ্ট পণ্য এবং এইসব ইন্টারফেসের উপশ্রেণী পরিবার তৈরি করার জন্য ইন্টারফেস প্রদান সংশ্লিষ্ট পণ্য তৈরি করার পদ্ধতি নির্ধারণ করুন।

তারপরে এই সাবক্লাসগুলি যখন তাত্ক্ষণিকভাবে পণ্য শ্রেণিতে পাস করা হয় যেখানে এটি বিমূর্ত প্রকার হিসাবে ব্যবহৃত হয়। এ সম্পর্কিত পণ্যগুলি Abstract Factoryপ্রায়শই ব্যবহার করে প্রয়োগ করা হয় Factory Method


3

জন ফেমেনিেলার উত্তর প্রসারিত করা:

Apple, Banana, Cherryকার্যকরী FruitFactoryএবং যে একটি পদ্ধতি বলা Createযা Apple বা কলা বা চেরি তৈরি করার একমাত্র দায়ী। আপনার Factoryপদ্ধতিটি দিয়ে আপনি কাজটি শেষ করেছেন ।

এখন, আপনি Createআপনার ফলের বাইরে একটি বিশেষ সালাদ করতে চান এবং সেখানে আপনার অ্যাবস্ট্রাক্ট কারখানা রয়েছে । অ্যাবস্ট্রাক্ট ফ্যাক্টরি অ্যাপল, কলা এবং চেরি থেকে কীভাবে আপনার বিশেষ সালাদ তৈরি করতে পারে তা জানে।

public class Apple implements Fruit, FruitFactory {
    public Fruit Create() {
        // Apple creation logic goes here
    }
}

public class Banana implements Fruit, FruitFactory {
    public Fruit Create() {
        // Banana creation logic goes here
    }
}

public class Cherry implements Fruit, FruitFactory {
    public Fruit Create() {
        // Cherry creation logic goes here
    }
}

public class SpecialSalad implements Salad, SaladFactory {
    public static Salad Create(FruitFactory[] fruits) {
        // loop through the factory and create the fruits.
        // then you're ready to cut and slice your fruits 
        // to create your special salad.
    }
}

2

সংজ্ঞা দ্বারা আমরা দুটি পার্থক্য টেনে আনতে পারি:

কারখানা: একটি ইন্টারফেস একটি অবজেক্ট তৈরি করার জন্য ব্যবহৃত হয় তবে সাবক্লাস সিদ্ধান্ত নেয় যে কোন শ্রেণিটি ইনস্ট্যান্ট করতে হবে। যখন প্রয়োজন হয় তখন অবজেক্ট তৈরি করা হয়।

বিমূর্ত কারখানা: অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্ন একটি সুপার-কারখানা হিসাবে কাজ করে যা অন্যান্য কারখানা তৈরি করে factories অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্নে একটি ইন্টারফেস সম্পর্কিত বস্তুগুলির একটি সেট তৈরি করার জন্য দায়বদ্ধ, বা নির্ভরযোগ্য অবজেক্টগুলি তাদের কংক্রিটের ক্লাসগুলি নির্দিষ্ট না করেই তৈরি করে।

সুতরাং, উপরোক্ত সংজ্ঞাগুলিতে আমরা একটি বিশেষ পার্থক্যের উপর জোর দিতে পারি। অর্থাৎ, কারখানার প্যাটার্নটি অবজেক্ট তৈরির জন্য দায়ী এবং অ্যাবস্ট্রাক্ট ফ্যাক্টরি সম্পর্কিত বিষয়গুলির একটি সেট তৈরি করার জন্য দায়ী; স্পষ্টতই একটি ইন্টারফেস মাধ্যমে উভয়।

কারখানার প্যাটার্ন:

public interface IFactory{
  void VehicleType(string n);
 }

 public class Scooter : IFactory{
  public void VehicleType(string n){
   Console.WriteLine("Vehicle type: " + n);
  }
 }

 public class Bike : IFactory{
  public void VehicleType(string n) {
  Console.WriteLine("Vehicle type: " + n);
  }
 }

 public interface IVehicleFactory{
  IFactory GetVehicleType(string Vehicle);
 }

 public class ConcreteVehicleFactory : IVehicleFactory{
 public IFactory GetVehicleType(string Vehicle){
   switch (Vehicle){
    case "Scooter":
     return new Scooter();
    case "Bike":
     return new Bike();
    default:
    return new Scooter();
  }
 }

 class Program{
  static void Main(string[] args){
   IVehicleFactory factory = new ConcreteVehicleFactory();
   IFactory scooter = factory.GetVehicleType("Scooter");
   scooter.VehicleType("Scooter");

   IFactory bike = factory.GetVehicleType("Bike");
   bike.VehicleType("Bike");

   Console.ReadKey();
 }
}

বিমূর্ত কারখানার প্যাটার্ন:

interface IVehicleFactory{
 IBike GetBike();
 IScooter GetScooter();
}

class HondaFactory : IVehicleFactory{
     public IBike GetBike(){
            return new FZS();
     }
     public IScooter GetScooter(){
            return new FZscooter();
     }
 }
class HeroFactory: IVehicleFactory{
      public IBike GetBike(){
            return new Pulsur();
     }
      public IScooter GetScooter(){
            return new PulsurScooter();
     }
}

interface IBike
    {
        string Name();
    }
interface IScooter
    {
        string Name();
    }

class FZS:IBike{
   public string Name(){
     return "FZS";
   }
}
class Pulsur:IBike{
   public string Name(){
     return "Pulsur";
   }
}

class FZscooter:IScooter {
  public string Name(){
     return "FZscooter";
   }
}

class PulsurScooter:IScooter{
  public string Name(){
     return "PulsurScooter";
   }
}

enum MANUFACTURERS
{
    HONDA,
    HERO
}

class VehicleTypeCheck{
        IBike bike;
        IScooter scooter;
        IVehicleFactory factory;
        MANUFACTURERS manu;

        public VehicleTypeCheck(MANUFACTURERS m){
            manu = m;
        }

        public void CheckProducts()
        {
            switch (manu){
                case MANUFACTURERS.HONDA:
                    factory = new HondaFactory();
                    break;
                case MANUFACTURERS.HERO:
                    factory = new HeroFactory();
                    break;
            }

      Console.WriteLine("Bike: " + factory.GetBike().Name() + "\nScooter: " +      factory.GetScooter().Name());
        }
  }

class Program
    {
        static void Main(string[] args)
        {
            VehicleTypeCheck chk = new VehicleTypeCheck(MANUFACTURERS.HONDA);
            chk.CheckProducts();

            chk= new VehicleTypeCheck(MANUFACTURERS.HERO);
            chk.CheckProducts();

            Console.Read();
        }
    }

1

এখানে চেক করুন: http://www.allapplabs.com/java_design_ Patterns / abstract_factory_pattern.htm মনে হয় ফ্যাক্টরি পদ্ধতিটি একটি নির্দিষ্ট শ্রেণিকে (বিমূর্ত নয়) বেস ক্লাস হিসাবে ব্যবহার করে যখন অ্যাবস্ট্রাক্ট ফ্যাক্টরি এ জন্য একটি বিমূর্ত শ্রেণি ব্যবহার করে। এছাড়াও যদি অ্যাবস্ট্রাক্ট ক্লাসের পরিবর্তে কোনও ইন্টারফেস ব্যবহার করা হয় তবে ফলাফলটি অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্নের আলাদা বাস্তবায়ন হবে।

: ডি


1

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


1

আমি মনে করি একটি জাভা 8 উদাহরণ কোড দেখে আমরা এই দুটিয়ের মধ্যে পার্থক্য বুঝতে পারি:

  interface Something{}

  interface OneWhoCanProvideSomething {
     Something getSomething();
  }

  interface OneWhoCanProvideCreatorsOfSomething{
     OneWhoCanProvideSomething getCreator();
  }


public class AbstractFactoryExample {

    public static void main(String[] args) {
        //I need something
        //Let's create one
        Something something = new Something() {};

        //Or ask someone (FACTORY pattern)
        OneWhoCanProvideSomething oneWhoCanProvideSomethingOfTypeA = () -> null;
        OneWhoCanProvideSomething oneWhoCanProvideSomethingOfTypeB = () -> null;

        //Or ask someone who knows soemone who can create something (ABSTRACT FACTORY pattern)
        OneWhoCanProvideCreatorsOfSomething oneWhoCanProvideCreatorsOfSomething = () -> null;

        //Same thing, but you don't need to write you own interfaces
        Supplier<Something> supplierOfSomething = () -> null;
        Supplier<Supplier<Something>> supplierOfSupplier = () -> null;
    }

}

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

দ্বিতীয় উপায় (কারখানার প্যাটার্ন ব্যবহার করে): আপনাকে এমন সুবিধা প্রদান করে যে আপনি যে কোনও ধরণের বাস্তবায়ন পাস করতে পারেন, যা কিছু শর্তের ভিত্তিতে বিভিন্ন ধরণের কিছু সরবরাহ করতে পারে (সম্ভবত প্যারামিটারটি ক্রিয়েটিয়াল পদ্ধতিতে পাস হয়েছে)।

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

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

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