স্থির শ্রেণীর চেয়ে অ স্থিতিশীল অভ্যন্তর শ্রেণি কেন পছন্দ করেন?


37

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

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

স্থির নেস্টেড ক্লাসগুলি ব্যবহারের প্রভাব সম্পর্কে আমার বোঝার জন্য:

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

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

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

বা অন্য কথায়: কোনও আশ্রিত অভ্যন্তর শ্রেণিকে কেন পছন্দ করার কোনও দৃ conv়প্রত্যয়ী কারণ রয়েছে?


2
জাভা টিউটোরিয়াল থেকে : "আপনার যদি কোনও ঘেরের উদাহরণের অ-সর্বজনীন ক্ষেত্র এবং পদ্ধতিতে অ্যাক্সেসের প্রয়োজন হয় তবে একটি অ স্থিত নেস্টেড ক্লাস (বা অভ্যন্তরীণ শ্রেণি) ব্যবহার করুন you যদি আপনার এই অ্যাক্সেসের প্রয়োজন না হয় তবে একটি স্ট্যাটিক নেস্টেড ক্লাস ব্যবহার করুন।"
gnat

5
টিউটোরিয়াল উক্তিটির জন্য ধন্যবাদ, তবে এটি কেবল পুনরুক্তি করে যে পার্থক্যটি কী তা নয় কেন আপনি উদাহরণ ক্ষেত্রগুলি অ্যাক্সেস করতে চান না।
ফ্রাঙ্ক

এটি বরং একটি সাধারণ দিকনির্দেশনা, কোনটি পছন্দ করবেন তা ইঙ্গিত করে। আমি এই উত্তরে এর
gnat

1
যদি অভ্যন্তরীণ বর্গটি ঘেরের ক্লাসে শক্তভাবে মিলিত না হয় তবে এটি সম্ভবত প্রথম স্থানের অভ্যন্তর শ্রেণি হওয়া উচিত নয়।
কেভিন ক্রামউইদে

উত্তর:


23

জোশুয়া ব্লচ তার "কার্যকর জাভা দ্বিতীয় সংস্করণ" বইয়ের 22 আইটেমটিতে বলেছেন যে কখন কোন ধরনের নেস্টেড ক্লাস ব্যবহার করতে হবে এবং কেন। নীচে কিছু উদ্ধৃতি রয়েছে:

স্ট্যাটিক সদস্য শ্রেণীর একটি সাধারণ ব্যবহার হ'ল জন সাহায্যকারী শ্রেণি হিসাবে এটি কেবল তার বাইরের শ্রেণীর সাথে একত্রে কার্যকর। উদাহরণস্বরূপ, একটি ক্যালকুলেটর দ্বারা সমর্থিত অপারেশনগুলি বর্ণনা করে এমন একটি এনাম বিবেচনা করুন। অপারেশন এনামটি ক্লাসের সর্বজনীন স্ট্যাটিক সদস্য শ্রেণি হওয়া উচিত Calculator। এর ক্লায়েন্টরা Calculatorএরপরে Calculator.Operation.PLUSএবং এর মতো নাম ব্যবহার করে অপারেশনগুলি উল্লেখ করতে পারে Calculator.Operation.MINUS

ননস্ট্যাটিক সদস্য শ্রেণির একটি সাধারণ ব্যবহার একটি অ্যাডাপ্টারের সংজ্ঞা দেওয়া যা বাইরের শ্রেণীর কোনও উদাহরণকে কিছু সম্পর্কযুক্ত শ্রেণীর উদাহরণ হিসাবে দেখা যায়। উদাহরণস্বরূপ, এর বাস্তবায়নের Mapইন্টারফেস সাধারণত বাস্তবায়ন nonstatic সদস্য শ্রেণীর ব্যবহার সংগ্রহ মতামত , যা দ্বারা ফিরে করছে Map'র keySet, entrySetএবং valuesপদ্ধতি। একইভাবে, সংগ্রহের ইন্টারফেসগুলির বাস্তবায়ন যেমন Setএবং Listসাধারণত তাদের পুনরাবৃত্তিকারীদের প্রয়োগ করতে ননস্ট্যাটিক সদস্য শ্রেণি ব্যবহার করে:

// Typical use of a nonstatic member class
public class MySet<E> extends AbstractSet<E> {
    ... // Bulk of the class omitted

    public Iterator<E> iterator() {
        return new MyIterator();
    }

    private class MyIterator implements Iterator<E> {
        ...
    }
}

আপনি একজন সদস্য বর্গ যে পরিক্ষেপ উদাহরণস্বরূপ এক্সেস প্রয়োজন হয় না ডিক্লেয়ার পারেন, সবসময় করা staticতার ঘোষণায় পরিবর্তক, এটি একটি nonstatic সদস্য বর্গ একটি স্ট্যাটিক বদলে করে।


1
আমি পুরোপুরি নিশ্চিত নই / কীভাবে এই অ্যাডাপ্টারটি বাইরের শ্রেণীর MySetউদাহরণগুলির দৃষ্টিভঙ্গি পরিবর্তন করে ? আমি কোনও পথ-নির্ভর ধরণের মতো একটি পার্থক্যের মতো কিছু কল্পনা করতে পারি myOneSet.iterator.getClass() != myOtherSet.iterator.getClass(), তবে আবারও, জাভাতে এটি আসলে সম্ভব নয়, কারণ শ্রেণি প্রতিটিটির জন্য একই হবে।
ফ্রাঙ্ক

@ ফ্র্যাঙ্ক এটি একটি দুর্দান্ত টিপুনাল অ্যাডাপ্টার শ্রেণি - এটি আপনাকে সেটটিকে তার উপাদানগুলির একটি স্ট্রিম হিসাবে দেখতে দেয় (একজন আইট্রেটার)।
ব্যবহারকারী 253751

@ মিম্বিস ধন্যবাদ, আমি পুনরাবৃত্তিকারী / অ্যাডাপ্টার কী করে তা সম্পর্কে আমি ভালভাবেই অবগত, তবে কীভাবে এটি প্রয়োগ করা হয় সে সম্পর্কে এই প্রশ্নটি ছিল ।
ফ্রাঙ্ক

@ ফ্র্যাঙ্ক আমি বলছিলাম যে এটি কীভাবে বাইরের উদাহরণের দৃষ্টিভঙ্গিকে পরিবর্তন করে। এটি ঠিক একটি অ্যাডাপ্টারের কাজ করে - এটি আপনাকে কোনও অবজেক্ট দেখার পদ্ধতি পরিবর্তন করে। এই ক্ষেত্রে, সেই বস্তুটি বাহ্যিক উদাহরণ।
ব্যবহারকারী 253751

10

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

অভ্যন্তরীণ শ্রেণীকে অ-স্থিতিশীল করার সিদ্ধান্তের নকশাগুলি জাভা পাজলার্স , ধাঁধা 90 এ বলা হয়েছে (নীচে উদ্ধৃতিতে গা bold ফন্টটি আমার):

আপনি যখনই কোনও সদস্য শ্রেণি লিখবেন, নিজেকে জিজ্ঞাসা করুন, এই শ্রেণীর আসলেই কোনও ঘেরের উদাহরণ প্রয়োজন? উত্তরটি যদি না হয় তবে এটি তৈরি করুন static। অভ্যন্তরীণ ক্লাসগুলি কখনও কখনও দরকারী, তবে তারা সহজেই এমন জটিলতাগুলি প্রবর্তন করতে পারে যা একটি প্রোগ্রাম বোঝা শক্ত করে তোলে। জেনেরিক (ধাঁধা 89), প্রতিবিম্ব (ধাঁধা 80) এবং উত্তরাধিকার (এই ধাঁধা) এর সাথে তাদের জটিল মিথস্ক্রিয়া রয়েছে । আপনি যদি ঘোষণা Inner1করেন static, সমস্যাটি চলে যায়। আপনার কাছে ঘোষণা তাহলে Inner2হতে static, আপনি আসলে বুঝতে পারেন কি প্রোগ্রাম আছে: একটা চমৎকার বোনাস প্রকৃতপক্ষে।

সংক্ষেপে, একটি শ্রেণীর পক্ষে অন্তঃশ্রেণী এবং অন্যের একটি উপশ্রেণী উভয়ই হওয়া খুব কমই উপযুক্ত। আরও সাধারণভাবে, অভ্যন্তর শ্রেণি প্রসারিত করা খুব কমই উপযুক্ত; যদি আপনার অবশ্যই হয়, ঘেরের উদাহরণটি সম্পর্কে দীর্ঘ এবং কঠোরভাবে চিন্তা করুন। এছাড়াও, staticনেস্টেড ক্লাসগুলিকে নন-এর চেয়ে বেশি পছন্দ করুন static। বেশিরভাগ সদস্যের ক্লাসগুলি ঘোষণা করা উচিত এবং করা উচিত static

আপনি যদি আগ্রহী হন তবে স্ট্যাক ওভারফ্লোতে এই উত্তরে ধাঁধা 90 এর আরও বিশদ বিশ্লেষণ সরবরাহ করা হবে ।


এটি লক্ষণীয় যে উপরেরটি মূলত জাভা ক্লাস এবং অবজেক্ট টিউটোরিয়ালে প্রদত্ত দিকনির্দেশনার একটি বর্ধিত সংস্করণ :

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

সুতরাং, টিউটোরিয়াল অনুসারে আপনি অন্য কথায় যে প্রশ্নটি জিজ্ঞাসা করেছেন তার উত্তর হ'ল অনাস্থা ব্যবহারের একমাত্র দৃ reason় কারণ হ'ল যখন কোনও ঘেরের উদাহরণের অ-সর্বজনীন ক্ষেত্র এবং পদ্ধতিতে অ্যাক্সেস প্রয়োজন হয়

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


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

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


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

Setএই মানচিত্রে থাকা কীগুলির একটি দর্শন ফিরিয়ে দেয় । সেটটি মানচিত্রে সমর্থনযুক্ত, সুতরাং মানচিত্রে পরিবর্তনগুলি সেটে প্রতিফলিত হয় এবং বিপরীতে ...

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


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

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

এটাই আসল কথা. যদি এটি সবসময় ভাল হয় তবে আমরা কেন বিরক্ত করব?
ফ্রাঙ্ক

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

1

কিছু ভুল ধারণা:

কম সংশ্লেষ: [সাধারণত স্থির অভ্যন্তরীণ] শ্রেণি তার বাহ্যিক শ্রেণীর বৈশিষ্ট্যগুলি সরাসরি অ্যাক্সেস করতে পারে না বলে আমরা সাধারণত কম সংযুক্তি পাই get

আইআইআরসি - আসলে, এটি পারে। (অবশ্যই তারা যদি বস্তু ক্ষেত্র হয় তবে এটির দেখার জন্য কোনও বাহ্যিক বস্তু থাকবে না et তবুও, যদি এটি কোথাও থেকে এই জাতীয় বস্তু পায় তবে এটি সরাসরি সেই ক্ষেত্রগুলিতে অ্যাক্সেস করতে পারে)।

একক শ্রেণি: ক্লাস লোডার প্রতিবার নতুন ক্লাসের যত্ন নেওয়ার প্রয়োজন হয় না, আমরা বাইরের শ্রেণীর একটি বস্তু তৈরি করি। আমরা কেবল একই ক্লাসের জন্য বারবার নতুন নতুন সামগ্রী পেয়েছি।

আপনি এখানে কী বলতে চাইছেন তা আমি নিশ্চিত নই। ক্লাস লোডার কেবলমাত্র দুটি বার জড়িত, প্রতিটি ক্লাসের জন্য একবার (যখন শ্রেণিটি বোঝা হয়)।


র‌্যাম্বলিং নিম্নলিখিত:

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

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

আমরা অভ্যন্তর শ্রেণীর ব্যক্তিগতকে রেখে সরাসরি অ্যাক্সেসের উপর নকশা উদ্বেগগুলি দূরে রাখতে পারি।

(... আপনি যদি জিজ্ঞাসা করতেন যে 'কেন একটি স্থিতিশীল জনসাধারণের অভ্যন্তরীণ শ্রেণি?') এটি একটি খুব ভাল প্রশ্ন - আমি মনে করি না আমি এখনও তাদের পক্ষে ন্যায়সঙ্গত মামলা খুঁজে পেয়েছি)।

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


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


0

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

বিবেচনা:

public class QueryFactory {
    @Inject private Database database;

    public Query create(String sql) {
        return new Query(database, sql);
    }
}

public class Query {
    private final Database database;
    private final String sql;

    public Query(Database database, String sql) {
        this.database = database;
        this.sql = sql;
    } 

    public List performQuery() {
        return database.query(sql);
    }
}

হিসাবে ব্যবহার:

Query q = queryFactory.create("SELECT * FROM employees");

q.performQuery();

একটি অ স্থিতিশীল অভ্যন্তর শ্রেণীর সাথে একই জিনিস অর্জন করা যেতে পারে:

public class QueryFactory {
    @Inject private Database database;

    public class Query {
        private final String sql;

        public Query(String sql) {
            this.sql = sql;
        }

        public List performQuery() {
            return database.query(sql);
        }
    }
}

ব্যবহৃত হচ্ছে:

Query q = queryFactory.new Query("SELECT * FROM employees");

q.performQuery();

কারখানাগুলি বিশেষত নামকরণের পদ্ধতিগুলি, যেমন create, createFromSQLবা রাখার দ্বারা উপকৃত হয় createFromTemplate। একাধিক অভ্যন্তর শ্রেণীর আকারেও এখানে একই কাজ করা যেতে পারে:

public class QueryFactory {

    public class SQL { ... }
    public class Native { ... }
    public class Builder { ... }

}

কারখানা থেকে নির্মিত ক্লাসে কম প্যারামিটার পাসিংয়ের প্রয়োজন, তবে পঠনযোগ্যতা কিছুটা ক্ষতিগ্রস্থ হতে পারে।

তুলনা করা:

Queries.Native q = queries.new Native("select * from employees");

বনাম

Query q = queryFactory.createNative("select * from employees");
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.