কারখানা এবং বিমূর্ত কারখানার প্যাটার্নগুলির মধ্যে মূল পার্থক্য কী?
createThing()
) এবং অ্যাবস্ট্রাক্ট ফ্যাক্টরিটি রচনা ব্যবহার করে (দিকনির্দেশটি অনুভূমিক উদাহরণস্বরূপ getFactory().createThing()
)
কারখানা এবং বিমূর্ত কারখানার প্যাটার্নগুলির মধ্যে মূল পার্থক্য কী?
createThing()
) এবং অ্যাবস্ট্রাক্ট ফ্যাক্টরিটি রচনা ব্যবহার করে (দিকনির্দেশটি অনুভূমিক উদাহরণস্বরূপ getFactory().createThing()
)
উত্তর:
কারখানার প্যাটার্ন সঙ্গে, আপনি (বাস্তবায়নের দৃষ্টান্ত উত্পাদন Apple
, Banana
, Cherry
, বলে - একটি বিশেষ ইন্টারফেসের, ইত্যাদি) IFruit
।
অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্ন সহ, আপনি যে কারও জন্য তাদের নিজস্ব কারখানা সরবরাহের জন্য একটি উপায় সরবরাহ করেন। এটি আপনার গুদামকে ফল বা রস সম্পর্কে কিছু জানার প্রয়োজন ছাড়াই আপনার গুদামকে হয় একটি IFruitFactory
বা একটি হতে দেয় IJuiceFactory
।
IFruit
- এটা যা বাস্তবায়ন instantiates IFruit
। অবশ্যই এটি কোনও নির্দিষ্ট ইন্টারফেস বাস্তবায়িত করে এমন জিনিসগুলির উদাহরণ তৈরি করার দরকার নেই , তবে আপনার যদি এমন কোনও ফ্যাক্টরি থাকে যা একে অপরের সাথে সম্পূর্ণ সম্পর্কযুক্ত নয় এমন উত্পাদন করে।
এই তথ্যের উত্স থেকে নেওয়া: http://java.dzone.com/news/intro-design-patterns-abstract
একটি বিমূর্ত কারখানার পদ্ধতিগুলি কারখানার পদ্ধতি হিসাবে প্রয়োগ করা হয়। অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্ন এবং কারখানার পদ্ধতি প্যাটার্ন উভয়ই অ্যাবস্ট্রাক্ট প্রকার এবং কারখানার মাধ্যমে ক্লায়েন্ট সিস্টেমকে প্রকৃত বাস্তবায়ন ক্লাস থেকে ডেসপল করে। কারখানার পদ্ধতি উত্তরাধিকারের মাধ্যমে অবজেক্ট তৈরি করে যেখানে অ্যাবস্ট্রাক্ট ফ্যাক্টরি কম্পোজিশনের মাধ্যমে অবজেক্ট তৈরি করে।
অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্নটিতে একটি অ্যাবস্ট্রাকফ্যাক্টরি, কংক্রিটফ্যাক্টরি, অ্যাবস্ট্রাক্ট প্রোডাক্ট, কংক্রিটপ্রোডাক্ট এবং ক্লায়েন্ট রয়েছে।
অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্নটি ফ্যাক্টরি পদ্ধতি প্যাটার্ন, প্রোটোটাইপ প্যাটার্ন বা সিঙ্গলটন প্যাটার্ন ব্যবহার করে প্রয়োগ করা যেতে পারে। কংক্রিটফ্যাক্টরি অবজেক্টটি সিঙ্গেলটন হিসাবে প্রয়োগ করা যেতে পারে কারণ কংক্রিটফ্যাক্টরি অবজেক্টের কেবলমাত্র একটি উদাহরণ প্রয়োজন।
কারখানার পদ্ধতি প্যাটার্নটি অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্নের একটি সরল সংস্করণ। কারখানার পদ্ধতির প্যাটার্নটি এমন একটি পণ্য যা একটি পরিবারের অন্তর্ভুক্ত তা তৈরি করার জন্য দায়বদ্ধ, আবার অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্ন একাধিক পরিবারের সাথে কাজ করে।
কারখানার পদ্ধতিটি জেনারেটর শ্রেণি এবং ফলস্বরূপ পণ্যগুলি থেকে ক্লায়েন্টকে ডিকুয়াল করতে ইন্টারফেস এবং বিমূর্ত শ্রেণি ব্যবহার করে। অ্যাবস্ট্রাক্ট ফ্যাক্টরিতে এমন একটি জেনারেটর রয়েছে যা জেনারেটর এবং পণ্যগুলি থেকে ক্লায়েন্টকে ডাইপল করে ইন্টারফেসের সাথে বিভিন্ন কারখানা পদ্ধতির ধারক is
কারখানাটি যখন ব্যবহার করে কোনও নির্দিষ্ট পণ্য থেকে ক্লায়েন্টকে ডিকুয়াল করার প্রয়োজন হয় তখন কারখানা পদ্ধতি পদ্ধতিটি ব্যবহার করুন। কোনও পণ্যের উদাহরণ তৈরি এবং কনফিগার করার দায়বদ্ধতার কোনও ক্লায়েন্টকে মুক্তি দিতে কারখানার পদ্ধতিটি ব্যবহার করুন।
অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্নটি ব্যবহার করুন যখন ক্লায়েন্টদের অবশ্যই পণ্য শ্রেণি থেকে ডিকুলড করা উচিত। প্রোগ্রাম কনফিগারেশন এবং সংশোধন জন্য বিশেষভাবে দরকারী। অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্নটি অন্যান্য শ্রেণীর সাথে কোন ক্লাসগুলি ব্যবহার করা উচিত সে সম্পর্কেও প্রতিবন্ধকতাগুলি প্রয়োগ করতে পারে। নতুন কংক্রিটের কারখানা করা অনেক কাজ হতে পারে।
পাস্তা প্রস্তুতকারকের মধ্যে ডিস্কের জন্য বিভিন্ন ধরণের পাস্তা প্রস্তুত করার জন্য এই স্পেসিফিকেশনটি হ'ল অ্যাবস্ট্রাক্ট ফ্যাক্টরি এবং প্রতিটি নির্দিষ্ট ডিস্কটি একটি কারখানা। সমস্ত কারখানা (পাস্তা নির্মাতকারী ডিস্ক) বিমূর্ত কারখানা থেকে তাদের সম্পত্তি উত্তরাধিকার সূত্রে প্রাপ্ত। প্রতিটি স্বতন্ত্র ডিস্কে পাস্তা কীভাবে তৈরি করা যায় তার তথ্য রয়েছে এবং পাস্তা নির্মাতারা তা করেন না।
স্ট্যাম্পিং সরঞ্জাম বিমূর্ত কারখানার সাথে সম্পর্কিত, কারণ এটি অপারেশনগুলির জন্য ইন্টারফেস যা বিমূর্ত পণ্য সামগ্রী তৈরি করে। মরা কংক্রিট কারখানার সাথে মিলে যায়, কারণ তারা একটি কংক্রিট পণ্য তৈরি করে। প্রতিটি অংশের বিভাগ (হুড, ডোর ইত্যাদি) বিমূর্ত পণ্যটির সাথে মিলে যায়। নির্দিষ্ট অংশগুলি (অর্থাত্, 99 ক্যামেরির জন্য ড্রাইভার পাশের দরজা) কংক্রিট পণ্যগুলির সাথে মিলে যায়।
খেলনা সংস্থাটি নির্মাতার সাথে সামঞ্জস্য করে, যেহেতু এটি কারখানাটি পণ্য সামগ্রী তৈরি করতে ব্যবহার করতে পারে। খেলনা সংস্থার বিভাগ যা একটি নির্দিষ্ট ধরণের খেলনা (ঘোড়া বা গাড়ি) উত্পাদন করে তা কংক্রিটক্রিটরের সাথে মিলে যায়।
কারখানার প্যাটার্ন: কারখানাটি আইপ্রডাক্ট-বাস্তবায়ন উত্পাদন করে
অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্ন: একটি কারখানা-কারখানা আইফ্যাক্টরিগুলি তৈরি করে, যার ফলে আইড্রডাক্টস উত্পাদন হয় :)
[মন্তব্য অনুসারে আপডেট করুন]
আমি আগে যা লিখেছি তা কমপক্ষে উইকিপিডিয়া অনুযায়ী সঠিক নয় । একটি বিমূর্ত কারখানাটি কেবল একটি কারখানার ইন্টারফেস। এটির সাহায্যে আপনি আপনার কারখানাগুলিকে রানটাইমে স্যুইচ করতে পারেন, বিভিন্ন প্রসঙ্গে বিভিন্ন কারখানার অনুমতি দিতে। উদাহরণগুলি বিভিন্ন ওএস, এসকিউএল সরবরাহকারী, মিডলওয়্যার-ড্রাইভার ইত্যাদির জন্য বিভিন্ন কারখানা হতে পারে ..
সম্পর্কিত বা নির্ভরশীল বস্তুর পরিবারগুলি তাদের কংক্রিটের ক্লাসগুলি নির্দিষ্ট না করে তৈরি করার জন্য একটি ইন্টারফেস সরবরাহ করুন।
অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্নটি ফ্যাক্টরি পদ্ধতি প্যাটার্নের সাথে খুব মিল। উভয়ের মধ্যে একটি পার্থক্য হ'ল অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্নের সাথে, কোনও শ্রেণি কম্পোজিশনের মাধ্যমে অবজেক্ট ইনস্ট্যান্টেশনের দায়িত্ব অর্পণ করে যেখানে ফ্যাক্টরি মেথড প্যাটার্নটি উত্তরাধিকার ব্যবহার করে এবং পছন্দসই অবজেক্টটি পরিচালনা করতে সাবক্লাসের উপর নির্ভর করে।
আসলে, অর্পিত বস্তুটি ঘন ঘন ইনস্ট্যান্টেশন সম্পাদনের জন্য কারখানার পদ্ধতি ব্যবহার করে!
কারখানা নিদর্শন সৃজনশীল নিদর্শন উদাহরণ
সৃষ্টিশীল নিদর্শনগুলি বস্তুর তাত্ক্ষণিক প্রক্রিয়াটিকে বিমূর্ত করে। তারা কীভাবে অবজেক্ট তৈরি করা হয় তা গোপন করে এবং সামগ্রিক সিস্টেমটিকে কীভাবে তার অবজেক্টগুলি তৈরি এবং সংমিশ্রণ করা যায় তা স্বাধীন করতে সহায়তা করে।
শ্রেণীর ক্রিয়েটিভ প্যাটার্নগুলি অবজেক্টটি কারখানার পদ্ধতিটি ইনস্ট্যান্ট করার সিদ্ধান্ত নেওয়ার জন্য উত্তরাধিকারের ব্যবহারের দিকে মনোনিবেশ করে
অবজেক্ট সৃজনশীল নিদর্শনগুলি অন্য কোনও বস্তুর অ্যাবস্ট্রাক্ট ফ্যাক্টরিতে ইনস্ট্যান্টেশনের প্রতিনিধিটির দিকে মনোনিবেশ করে
তথ্যসূত্র: কারখানা বনাম বিমূর্ত কারখানা
কারখানার পদ্ধতি: আপনার একটি কারখানা রয়েছে যা একটি নির্দিষ্ট বেস শ্রেণি থেকে প্রাপ্ত বস্তু তৈরি করে
বিমূর্ত কারখানা: আপনার একটি কারখানা রয়েছে যা অন্যান্য কারখানা তৈরি করে এবং এই কারখানাগুলি ঘুরে বেজ ক্লাস থেকে প্রাপ্ত বস্তু তৈরি করে। আপনি এটি কারণ এটি প্রায়শই কেবল একটি একক অবজেক্ট (কারখানার পদ্ধতি হিসাবে) তৈরি করতে চান না - বরং আপনি সম্পর্কিত বস্তুর একটি সংগ্রহ তৈরি করতে চান।
প্রাথমিক পার্থক্য:
কারখানা: ক্লায়েন্টের কাছে ইনস্ট্যান্টেশন যুক্তি প্রকাশ না করেই বস্তু তৈরি করে।
কারখানার পদ্ধতি : কোনও বস্তু তৈরির জন্য একটি ইন্টারফেস সংজ্ঞায়িত করুন, তবে সাবক্লাসগুলি সিদ্ধান্ত নিতে দিন কোন শ্রেণিটি ইনস্ট্যান্ট করতে হবে। কারখানা পদ্ধতিটি একটি শ্রেণিকে সাবক্লাসে স্থগিত করে দেয়
অ্যাবস্ট্রাক্ট ফ্যাক্টরি : তাদের কংক্রিটের ক্লাস নির্দিষ্ট না করে সম্পর্কিত বা নির্ভরশীল বস্তুর পরিবার তৈরি করার জন্য একটি ইন্টারফেস সরবরাহ করে।
অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্নটি অন্য শ্রেণিতে অবজেক্ট তৈরির দায়িত্ব অর্পণ করার জন্য রচনাটি ব্যবহার করে যখন কারখানা পদ্ধতি প্যাটার্ন উত্তরাধিকার ব্যবহার করে এবং অবজেক্ট তৈরি করতে ডাইরেক্ট ক্লাস বা উপ শ্রেণীর উপর নির্ভর করে
অডসাইন নিবন্ধগুলি থেকে :
কারখানা শ্রেণীর চিত্র:
উদাহরণ: স্ট্যাটিকফ্যাক্টরি
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;
}
}
অ স্ট্যাটিক কারখানা বাস্তবায়নকারী ফ্যাক্টরিমাথোদ উদাহরণটি এই পোস্টে পাওয়া যায়:
নকশার প্যাটার্নস: ফ্যাক্টরী বনাম কারখানা পদ্ধতি বনাম বিমূর্ত কারখানা
কখন ব্যবহার করবেন: ক্লায়েন্টকে কেবল একটি শ্রেণির প্রয়োজন এবং এটি কোন কংক্রিট বাস্তবায়ন করছে তা যত্ন করে না।
কারখানা পদ্ধতি শ্রেণি দিগরাম:
কখন ব্যবহার করবেন: ক্লায়েন্ট জানেন না রানটাইমের সময় কী কংক্রিটের ক্লাস তৈরি করা প্রয়োজন, তবে কেবল একটি ক্লাস পেতে চান যা কাজটি করবে।
জোন থেকে অ্যাবস্ট্রাক্ট ফ্যাক্টরি ক্লাস ডায়াগ্রাম
কখন ব্যবহার করবেন: আপনার সিস্টেমে যখন পণ্যগুলির একাধিক পরিবার তৈরি করতে হয় বা আপনি প্রয়োগের বিশদটি প্রকাশ না করেই পণ্যগুলির একটি গ্রন্থাগার সরবরাহ করতে চান।
উপরের নিবন্ধগুলিতে উত্স কোড উদাহরণগুলি ধারণাগুলি পরিষ্কারভাবে বুঝতে ভাল।
কোড উদাহরণ সহ এসই প্রশ্ন:
কারখানার প্যাটার্ন কারখানার পদ্ধতি কখন ব্যবহার করবেন?
পার্থক্য:
অন্যান্য দরকারী নিবন্ধ:
কারখানার_ উত্স তৈরির থেকে অর্থ
abstract_factory sourcemaking থেকে
জারদেব থেকে বিমূর্ত-কারখানা-ডিজাইন-প্যাটার্ন
অ্যাবস্ট্রাক্ট ফ্যাক্টরির উদাহরণ / পরিস্থিতি
আমি এমন জায়গায় থাকি যেখানে বৃষ্টিপাতের সময়ে বৃষ্টি হয়, শীতে শীত থাকে এবং গ্রীষ্মে গরম এবং রোদ থাকে। উপাদানগুলি থেকে নিজেকে রক্ষা করতে আমার বিভিন্ন ধরণের পোশাকের প্রয়োজন। এটি করার জন্য আমি আমার বাড়ির নিকটবর্তী দোকানে যাই এবং নিজের সুরক্ষার জন্য পোশাক / আইটেমের জন্য বলি। স্টোর রক্ষক আমাকে আমার পকেটের পরিবেশ এবং গভীরতা অনুসারে উপযুক্ত জিনিস দেয়। তিনি আমাকে যে আইটেমগুলি দিচ্ছেন সেগুলি মানের এবং মূল্য সীমার মানের। যেহেতু তিনি আমার মানদণ্ড সম্পর্কে সচেতন তাই এটি করা তাঁর পক্ষে সহজ। কিন্তু যখন রাস্তা জুড়ে কোনও ধনী লোক একই প্রয়োজনীয়তা নিয়ে আসে তখন সে একটি ব্যয়বহুল, ব্র্যান্ডের আইটেম পায়। একটি লক্ষণীয় জিনিস হ'ল তিনি আমাকে যে আইটেমগুলি প্রদান করেন তা হ'ল মেয়াদী মান, মান এবং ব্যয় হিসাবে একে অপরের পরিপূরক। তারা একে অপরের সাথে যেতে বলতে পারেন। এই ধনী লোকটি যে আইটেমগুলি পায় সেগুলির ক্ষেত্রে একই ঘটনা ঘটে।
সুতরাং উপরের দৃশ্যটি দেখে আমি এখন দোকানদারের দক্ষতার প্রশংসা করি। আমি এই দোকানদারকে একটি বিমূর্ত দোকান দিয়ে প্রতিস্থাপন করতে পারি। বিমূর্ত আইটেমগুলির সাথে আমরা যে আইটেমগুলি পাই সেগুলি এবং আমি এবং ধনী দৃষ্টিকোণ ক্লায়েন্ট হিসাবে। আমাদের কেবলমাত্র পণ্য / আইটেম যা আমাদের প্রয়োজন অনুসারে হয়।
এখন আমি সহজেই নিজেকে একটি অনলাইন স্টোর বিবেচনা করতে দেখতে পাই যা এর অসংখ্য ক্লায়েন্টকে পরিষেবাগুলির সেট সরবরাহ করে। প্রতিটি ক্লায়েন্ট তিনটি দলের একটির অন্তর্ভুক্ত। যখন কোনও প্রিমিয়াম গ্রুপ ব্যবহারকারী সাইটটি খুলেন তখন তিনি দুর্দান্ত ইউআই পেয়ে থাকেন, অত্যন্ত স্বনির্ধারিত বিজ্ঞাপন ফলক, মেনুগুলিতে আরও বিকল্প etc. এবং কিছুটা কম ইগ্রোনমিক ইউআই। সর্বশেষ আমার প্রকারের ব্যবহারকারী, একটি 'ফ্রি গ্রুপ' ব্যবহারকারী। আমি কেবল যথেষ্ট পরিবেশন করা হয়েছে যাতে আমার ক্ষতি না হয়। ইউআই একটি খালি ন্যূনতম, বিজ্ঞাপনগুলি এত বেশি ট্র্যাক বন্ধ করে দেয় যাতে আমি জানি না যে এটি কী আসে, শেষ পর্যন্ত মেনুটিতে কেবল লগ আউট হয়।
আমি যদি এই ওয়েবসাইটটির মতো কিছু তৈরির সুযোগ পাই তবে আমি অবশ্যই বিমূর্ত ফ্যাক্টরি প্যাটার্নটি বিবেচনা করব।
বিমূর্ত পণ্য: বিজ্ঞাপন ফলক, মেনু, ইউআই চিত্রকর।
বিমূর্ত কারখানা: ওয়েব স্টোর ব্যবহারকারীর অভিজ্ঞতা
কনক্রিয়েট কারখানা: প্রিমিয়াম ব্যবহারকারীর অভিজ্ঞতা, সোনার ব্যবহারকারীর অভিজ্ঞতা, সাধারণ ব্যবহারকারীর অভিজ্ঞতা।
অনেকে হয়ত অবাক বোধ করবেন তবে এই প্রশ্নটি ভুল । যদি আপনি একটি সাক্ষাত্কারের সময় এই প্রশ্নটি শুনতে পান তবে আপনাকে কোথায় বিভ্রান্তি রয়েছে তা ইন্টারভিউয়ারকে বুঝতে সহায়তা করা উচিত।
আসুন শুরু করা যাক যে কোনও কংক্রিট প্যাটার্ন নেই যা কেবল "কারখানা" বলা হয় is এমন প্যাটার্ন রয়েছে যা "অ্যাবস্ট্রাক্ট ফ্যাক্টরি" নামে পরিচিত, এবং এমন প্যাটার্ন রয়েছে যা "ফ্যাক্টরি পদ্ধতি" নামে পরিচিত।
তাহলে, "ফ্যাক্টরি" এর অর্থ কী? নিম্নলিখিতগুলির মধ্যে একটি (সমস্ত সঠিক হিসাবে বিবেচনা করা যেতে পারে, উল্লেখের ক্ষেত্রের উপর নির্ভর করে):
এবং, দুর্ভাগ্যক্রমে , অনেক লোক "কারখানা" ব্যবহার করে অন্য ধরণের কারখানা বোঝাতে, যা কারখানা বা কারখানা তৈরি করে (বা তাদের ইন্টারফেস)। তাদের তত্ত্বের ভিত্তিতে:
প্রোডাক্ট আইপিপ্রডাক্ট প্রয়োগ করে, যা কারখানা দ্বারা নির্মিত, যা আইফ্যাক্টরি প্রয়োগ করে, যা অ্যাস্ট্রাক্টফ্যাক্ট্রি দ্বারা নির্মিত।
এটি কত নির্বোধ তা বুঝতে, আসুন আমাদের সমীকরণটি চালিয়ে যান:
অ্যাবস্ট্রাকফ্যাক্ট্রি আইএবস্ট্র্যাক্ট ফ্যাক্টরি প্রয়োগ করে, যা তৈরি করেছে ... AbstractAbstractFactory ???
আমি আশা করি আপনি বিষয়টি দেখুন বিভ্রান্ত হবেন না, এবং দয়া করে এমন জিনিস আবিষ্কার করবেন না যা কারণে অস্তিত্বহীন।
-
PS : পণ্যগুলির জন্য কারখানা অ্যাবস্ট্রাকফ্যাক্টরি এবং অ্যাবস্ট্রাক্ট ফ্যাক্টরিগুলির জন্য কারখানাটি অ্যাবস্ট্রাকফ্যাক্টরীর আরও একটি উদাহরণ হতে পারে।
//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
। বস্তুর প্রতিটি পরিবার তৈরির জন্য এটি একটি কারখানার পদ্ধতি সরবরাহ করে।
মাথা প্রথম নকশা নিদর্শন থেকে উদাহরণ
জন এর উত্তরটি অবদানের জন্য আমার কিছু বিষয় রয়েছে:
"কারখানার পদ্ধতি" সঙ্গে (কারণ শুধু "ফ্যাক্টরী" দ্ব্যর্থক), আপনি বাস্তবায়ন (উত্পাদন Lemon
, Orange
বলুন, - একটি নির্দিষ্ট ইন্টারফেসের, ইত্যাদি) IFruit
। এই কারখানা কল করা যেতে পারে CitricFruitFactory
।
তবে এখন আপনি অন্য ধরণের ফল তৈরি করতে চান যা সিট্রিকফ্রুটফ্যাক্টরি তৈরি করতে সক্ষম নয়। হয়তো কোড CitricFruitFactory
যদি আপনি একটি তৈরি অর্থে দেখা যায় না হবেStrawberry
এটা (স্ট্রবেরি একটি সাইট্রিক ফল নয়!)।
যদি আপনি একটি নতুন ফ্যাক্টরি নামক তৈরী করতে পারে তাই RedFruitFactory
যে উত্পাদন করে Strawberry
, Raspberry
ইত্যাদি
জন ফেমেনেলা যেমন বলেছিলেন:
"অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্নের সাহায্যে আপনি একটি নির্দিষ্ট কারখানার ইন্টারফেসের বাস্তবায়ন উত্পাদন করেন - যেমন, IFruitFactory
তাদের প্রত্যেকেই জানেন যে কীভাবে বিভিন্ন ধরণের ফল তৈরি করা যায়।"
যে বাস্তবায়ন IFruitFactory
হয় CitricFruitFactory
এবং RedFruitFactory
!
আমার উত্স: 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
এবংAbstractFactory
। Factory Method
হিসাবে কেবল একটি ইন্টারফেসের একটি কংক্রিট ক্লাস Abstract Factory
ফিরিয়ে দিন তবে ফিরে আসুন factory of factory
। অন্য কথায় Abstract Factory
ইন্টারফেসের একটি সিরিজের বিভিন্ন সংযুক্ত ফেরত।
আমি আমার ব্যাখ্যা দরকারী আশা করি।
এই কারখানাগুলিতে প্রধান পার্থক্য হ'ল আপনি যখন কারখানার সাথে কী করতে চান এবং কখন আপনি এটি ব্যবহার করতে চান।
কখনও কখনও, যখন আপনি আইওসি করছেন (নিয়ন্ত্রণের বিপরীত উদাহরণস্বরূপ কনস্ট্রাক্টর ইঞ্জেকশন), আপনি জানেন যে আপনি শক্ত বস্তু তৈরি করতে পারেন। ফলের উপরের উদাহরণে উল্লিখিত হিসাবে, আপনি যদি ফলের বস্তু তৈরি করতে প্রস্তুত হন তবে আপনি সাধারণ কারখানার প্যাটার্ন ব্যবহার করতে পারেন ।
তবে অনেক সময় আপনি শক্ত বস্তু তৈরি করতে চান না, তারা প্রোগ্রাম প্রবাহে পরে আসবে। তবে কনফিগারেশনটি আপনাকে সূচনা করে কোন ধরণের কারখানাটি ব্যবহার করতে চান তা জানিয়ে দেয়, বস্তু তৈরির পরিবর্তে, আপনি এমন কারখানাগুলিতে যেতে পারেন যা একটি সাধারণ কারখানার শ্রেণি থেকে আইওসির কনস্ট্রাক্টারে প্রাপ্ত factories
সুতরাং, আমি বস্তুর আজীবন এবং সৃষ্টি সম্পর্কে এটিও ভাবি।
উভয় Factory Method
এবং Abstract Factory
ক্লায়েন্টদের কংক্রিট ধরণের থেকে decoupled রাখুন। উভয়ই বস্তু তৈরি করে তবে Factory
পদ্ধতিটি উত্তরাধিকার ব্যবহার করেAbstract Factory
ব্যবহার করে রচনা ব্যবহার করে।
Factory Method
কংক্রিট বস্তু (পণ্য) যেহেতু তৈরি করতে উপশ্রেণী মধ্যে উত্তরাধিকারসূত্রে হয়Abstract Factory
সংশ্লিষ্ট পণ্য এবং এইসব ইন্টারফেসের উপশ্রেণী পরিবার তৈরি করার জন্য ইন্টারফেস প্রদান সংশ্লিষ্ট পণ্য তৈরি করার পদ্ধতি নির্ধারণ করুন।
তারপরে এই সাবক্লাসগুলি যখন তাত্ক্ষণিকভাবে পণ্য শ্রেণিতে পাস করা হয় যেখানে এটি বিমূর্ত প্রকার হিসাবে ব্যবহৃত হয়। এ সম্পর্কিত পণ্যগুলি Abstract Factory
প্রায়শই ব্যবহার করে প্রয়োগ করা হয় Factory Method
।
জন ফেমেনিেলার উত্তর প্রসারিত করা:
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.
}
}
সংজ্ঞা দ্বারা আমরা দুটি পার্থক্য টেনে আনতে পারি:
কারখানা: একটি ইন্টারফেস একটি অবজেক্ট তৈরি করার জন্য ব্যবহৃত হয় তবে সাবক্লাস সিদ্ধান্ত নেয় যে কোন শ্রেণিটি ইনস্ট্যান্ট করতে হবে। যখন প্রয়োজন হয় তখন অবজেক্ট তৈরি করা হয়।
বিমূর্ত কারখানা: অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্ন একটি সুপার-কারখানা হিসাবে কাজ করে যা অন্যান্য কারখানা তৈরি করে 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();
}
}
এখানে চেক করুন: http://www.allapplabs.com/java_design_ Patterns / abstract_factory_pattern.htm মনে হয় ফ্যাক্টরি পদ্ধতিটি একটি নির্দিষ্ট শ্রেণিকে (বিমূর্ত নয়) বেস ক্লাস হিসাবে ব্যবহার করে যখন অ্যাবস্ট্রাক্ট ফ্যাক্টরি এ জন্য একটি বিমূর্ত শ্রেণি ব্যবহার করে। এছাড়াও যদি অ্যাবস্ট্রাক্ট ক্লাসের পরিবর্তে কোনও ইন্টারফেস ব্যবহার করা হয় তবে ফলাফলটি অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্নের আলাদা বাস্তবায়ন হবে।
: ডি
বিমূর্ত কারখানা বিভিন্ন ধরণের ইন্টারফেস তৈরির জন্য টেমপ্লেট। ধরুন আপনার কাছে এমন একটি প্রকল্প রয়েছে যার জন্য আপনাকে পরিমাণ, দাম এবং আইটেমের নির্দিষ্ট তথ্য সম্বলিত বিভিন্ন ধরণের সিএসভি ফাইলগুলি পার্স করার প্রয়োজন হয় যেমন কিছুতে চকোলেট সম্পর্কে অন্যান্য ফলের ডেটা থাকে এবং পার্স করার পরে আপনাকে তাদের সম্পর্কিত ডেটাবেজে এই তথ্যটি আপডেট করতে হবে যাতে এখন আপনি থাকতে পারেন একটি বিমূর্ত কারখানা আপনাকে পার্সার এবং মডিফায়ার ফ্যাক্টরি ফিরিয়ে দেবে এবং তারপরে এই পার্সার ফ্যাক্টরি আপনাকে চকোলেট পার্সার অবজেক্ট, ফ্রুট পার্সার অবজেক্ট ইত্যাদি ফিরিয়ে দিতে পারে এবং একইভাবে মোডিফায়ার ফ্যাক্টরি চকোলেট মোডিফায়ার অবজেক্ট, ফলের পরিবর্তনকারী বস্তু ইত্যাদি ফিরিয়ে দিতে পারে
আমি মনে করি একটি জাভা 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;
}
}
এখন প্রশ্নটি হল আপনার সৃষ্টির কোন পদ্ধতিটি ব্যবহার করা উচিত এবং কেন: প্রথম উপায় (কোনও নিদর্শন নয়, কেবল সরল নির্মাতা): নিজের দ্বারা তৈরি করা ভাল ধারণা নয়, আপনাকে সমস্ত কাজ করতে হবে, এবং আপনার ক্লায়েন্ট কোডটি এতে যুক্ত বিশেষ বাস্তবায়ন।
দ্বিতীয় উপায় (কারখানার প্যাটার্ন ব্যবহার করে): আপনাকে এমন সুবিধা প্রদান করে যে আপনি যে কোনও ধরণের বাস্তবায়ন পাস করতে পারেন, যা কিছু শর্তের ভিত্তিতে বিভিন্ন ধরণের কিছু সরবরাহ করতে পারে (সম্ভবত প্যারামিটারটি ক্রিয়েটিয়াল পদ্ধতিতে পাস হয়েছে)।
তৃতীয় উপায় (বিমূর্ত কারখানার প্যাটার্ন ব্যবহার করে): এটি আপনাকে আরও নমনীয়তা দেয়। আপনি কিছু শর্তের ভিত্তিতে কোনও কিছুর বিভিন্ন ধরণের স্রষ্টাকে খুঁজে পেতে পারেন (সম্ভবত কোনও প্যারামিটার পাস হয়েছে)।
নোট করুন যে আপনি সর্বদা দুটি শর্তকে একত্রিত করে কারখানার প্যাটার্নের সাথে দূরে সরে যেতে পারেন (যা কোড জটিলতা এবং সংযোগকে কিছুটা বাড়ায়), আমি অনুমান করি যে কেন আমরা খুব কমই অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্নের বাস্তব জীবনের ব্যবহারের ঘটনা দেখতে পাই।