জাভা রেজেক্স প্যাটার্নস - টাইম ধ্রুবক বা উদাহরণ সদস্যদের সংকলন করুন?


13

বর্তমানে, আমার বেশ কয়েকটি সিঙ্গলটন অবজেক্ট রয়েছে যেখানে আমি নিয়মিত প্রকাশের সাথে ম্যাচ করছি এবং আমার Patternগুলি এর মতো সংজ্ঞায়িত করা হয়েছে:

class Foobar {
  private final Pattern firstPattern =
    Pattern.compile("some regex");
  private final Pattern secondPattern =
    Pattern.compile("some other regex");
  // more Patterns, etc.
  private Foobar() {}
  public static Foobar create() { /* singleton stuff */ }
}

তবে অন্য দিন আমাকে একজন বলেছিল যে এটি খারাপ শৈলী, এবং সর্বদা ক্লাস স্তরে সংজ্ঞায়িত করা Patternউচিত এবং এর পরিবর্তে এর মতো কিছু দেখা উচিত:

class Foobar {
  private static final Pattern FIRST_PATTERN =
    Pattern.compile("some regex");
  private static final Pattern SECOND_PATTERN =
    Pattern.compile("some other regex");
  // more Patterns, etc.
  private Foobar() {}
  public static Foobar create() { /* singleton stuff */ }
}

এই নির্দিষ্ট অবজেক্টের জীবনকালটি দীর্ঘ নয়, এবং প্রথম পদ্ধতির ব্যবহারের জন্য আমার মূল কারণটি হ'ল Patternএকবার বস্তুটি GC'd হয়ে যাওয়ার পরে আমার কাছে ধরে রাখা কোনও অর্থবোধ করে না।

কোন পরামর্শ / চিন্তা?

উত্তর:


18

জাভা প্যাটার্ন অবজেক্টগুলি থ্রেড নিরাপদ এবং অপরিবর্তনীয় (এটির ম্যাডচারগুলি যে থ্রেড নিরাপদ নয়)।

যেমন, তারা ক্লাসের প্রতিটি উদাহরণ (বা ক্লাসের অন্য কোনও পদ্ধতিতে) দ্বারা ব্যবহার করা হচ্ছে যদি সেগুলি তৈরি না করার কোনও কারণ নেই static

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

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

অন্যদিকে ম্যাচার বরং হালকা - এটি প্যাটার্নের মধ্যে প্যাটার্নের অবস্থার এবং স্ট্রিংয়ের জন্য অক্ষরের অ্যারের অভ্যন্তরের অবস্থান নির্দেশ করে।


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

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

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

সম্পর্কিত:


দুর্দান্ত উত্তর - হ্যাঁ, আমি বোঝাতে চাইছি এটি কেবল একবারই তৈরি / ব্যবহৃত হয়েছিল এবং এটি একবার সুযোগের বাইরে চলে গেলে এটি ভাল হয়। ফলোআপ পড়ার জন্য ধন্যবাদ!
ইয়ামাফোন্টস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.