জাভাতে এনামকে সিঙ্গেলটন হিসাবে ব্যবহারের জন্য সেরা পদ্ধতির কী?


85

জাভাতে সেরা সিঙ্গেলটন বাস্তবায়ন - যা সিঙ্গেলটন তৈরির জন্য একটি এনাম ব্যবহার সম্পর্কে - কী কী পার্থক্য / উপকার / কনস (কনস্ট্রাক্টর বাদ দেওয়া আছে) এর মধ্যে পার্থক্যগুলি কী - এসও প্রশ্নে যা লেখা হয়েছে তা নিয়ে বিল্ডিং

public enum Elvis {
    INSTANCE;
    private int age;

    public int getAge() {
        return age;
    }
}

এবং তারপরে ফোন করা Elvis.INSTANCE.getAge()

এবং

public enum Elvis {
    INSTANCE;
    private int age;

    public static int getAge() {
        return INSTANCE.age;
    }
}

এবং তারপরে ফোন করা Elvis.getAge()

উত্তর:


96

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

আপনি যখন উদাহরণ চান তখন মূলত আপনি কেবল সিঙ্গলটন প্যাটার্ন ব্যবহার করেন । যদি স্থির পদ্ধতিগুলি আপনার পক্ষে ঠিক কাজ করে তবে কেবল সেগুলি ব্যবহার করুন এবং এনামের সাথে বিরক্ত করবেন না।


4
এনাম নিয়ে বিরক্ত করবেন না কেন? জাভা 5 + তে সিঙ্গেল্টন করার কি আরও ভাল উপায় আছে?
jontro

4
@ জোন্ট্রো (পুনরায়) উত্তরটি পড়ুন; তিনি বলেছেন যখন আপনার অবশ্যই সিঙ্গলটন থাকতে হবে তখন এনামগুলি ব্যবহার করতে হবে তবে আপনি যদি স্থির পদ্ধতিতে করতে পারেন তবে সিঙ্গলটন এড়ানোর জন্য
দুর্দিন পরিবর্তনশীল

@ দুর্ভাগ্যযোগ্য পরিবর্তনশীল আমি এই সম্পর্কে এক বছর আগে মন্তব্য করেছি। প্রকৃতপক্ষে কী প্রসঙ্গে আমি উল্লেখ করছি তা মনে রাখবেন না।
jontro

জিজ্ঞাসিত প্রশ্নের উত্তর দেয় না
থুফির

4
@ তুফির: এটি "পার্থক্য কী" অংশটির উত্তর দেয় - এটি প্রত্যাশিত যে উত্তরটি গ্রহণ করা হয়েছিল, তারপরে ওপি সবচেয়ে বেশি আগ্রহী ছিল।
জন স্কিটি

69

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

public enum Elvis implements HasAge {
    INSTANCE;
    private int age;

    @Override
    public int getAge() {
        return age;
    }
}

সঙ্গে:

public interface HasAge {
    public int getAge();
}

এটি স্ট্যাটিক্স দিয়ে করা যায় না ...


4
এটি স্ট্যাটিক্স দিয়ে করা যেতে পারে ... পাবলিক স্ট্যাটিক ফাইনাল হ্যাসএজ ইনস্ট্যান্স = নতুন হ্যাসেজ () {বেসরকারী ইনট এজ; @ ওভাররাইড পাবলিক ইন গেটএজ () {রিটার্ন বয়স; }}; ... তাই আমি এখনও ভাবছি এনাম পদ্ধতি সম্পর্কে ভাল বা আরও ভাল। আমি মনে করি আপনার যদি দুটি ইন্টারফেস বাস্তবায়নের প্রয়োজন হয়?
শান অ্যাডকিনসন

9

(স্টেটফুল) সিঙ্গেলন সাধারণত স্ট্যাটিক ভেরিয়েবল ব্যবহার না করার ভান করতে ব্যবহৃত হয়। আপনি যদি প্রকাশ্যে স্থির পরিবর্তনশীল ব্যবহার না করেন তবে আপনি কম লোককে বোকা বানাবেন।


8

আমি বিকল্পটি বেছে নেব যা সবচেয়ে সহজ এবং পরিষ্কার। এটি কিছুটা বিষয়ভিত্তিক, তবে আপনি কীটি পরিষ্কার তা জানেন না, কেবলমাত্র সংক্ষিপ্ত বিকল্পের জন্য যান।

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