সর্বাধিক দরকারী অ্যাপ্লিকেশনটি আমি পেয়েছি কারখানাগুলি বাস্তবায়নের সাথে। অনেক ক্ষেত্রে কারখানার অভ্যন্তরে পরিবর্তনযোগ্য তবে বাহ্যিক শ্রেণীর জন্য অপরিবর্তনীয় এমন ক্লাস তৈরি করা কার্যকর। এটি জাভাতে সহজেই অভ্যন্তরীণ ক্লাসগুলি ব্যবহার করে ক্ষেত্রগুলি এবং তাদের সেটারগুলি ব্যক্তিগত করে এবং কেবল প্রাপ্ত সদস্যদের পাবলিক সদস্য হিসাবে প্রকাশ করে প্রয়োগ করা যেতে পারে। তবে সি # তে, একই জিনিসটি অর্জন করতে আমাকে সুস্পষ্ট ইন্টারফেস ব্যবহার করতে হয়েছিল। আমি আরও ব্যাখ্যা করব:
জাভাতে, অভ্যন্তরীণ শ্রেণি এবং বহিরাগত শ্রেণি একে অপরের ব্যক্তিগত সদস্যদের অ্যাক্সেস করতে পারে, যা ক্লাসগুলি খুব ঘনিষ্ঠভাবে সম্পর্কিত বলে পুরো বোঝায়। এগুলি একই কোড ফাইলে রয়েছে এবং সম্ভবত একই বিকাশকারী দ্বারা বিকাশ করা হয়েছে। এর অর্থ হ'ল অভ্যন্তরীণ শ্রেণীর ব্যক্তিগত ক্ষেত্রগুলি এবং পদ্ধতিগুলি এখনও তাদের মানগুলিকে সংশোধন করতে কারখানায় অ্যাক্সেস করতে পারে। তবে বহিরাগত শ্রেণিগুলি তাদের সর্বজনীন প্রাপ্তদের মাধ্যমে বাদে এই ক্ষেত্রগুলিতে অ্যাক্সেস করতে পারবে না।
তবে, সি # তে, বাইরের শ্রেণিগুলি অভ্যন্তরীণ শ্রেণির ব্যক্তিগত সদস্যদের অ্যাক্সেস করতে পারে না যাতে ধারণাটি সরাসরি প্রযোজ্য না। আমি বহিরাগত শ্রেণিতে একটি ব্যক্তিগত ইন্টারফেস সংজ্ঞায়িত করে এবং স্পষ্টভাবে এটি অভ্যন্তরীণ শ্রেণিতে প্রয়োগ করে একটি স্পষ্ট ইন্টারফেসকে একটি কর্মক্ষেত্র হিসাবে ব্যবহার করেছি। এইভাবে, কেবলমাত্র বহিরাগত শ্রেণি জাভাতে করা একই পদ্ধতিতে এই ইন্টারফেসের পদ্ধতিগুলি অ্যাক্সেস করতে পারে (তবে তাদের ক্ষেত্রগুলি নয়, পদ্ধতিগুলি হতে হবে)।
উদাহরণ:
public class Factory
{
// factory method to create a hard-coded Mazda Tribute car.
public static Car CreateCar()
{
Car car = new Car();
// the Factory class can modify the model because it has access to
// the private ICarSetters interface
((ICarSetters)car).model = "Mazda Tribute";
return car;
}
// define a private interface containing the setters.
private interface ICarSetters
{
// define the setter in the private interface
string model { set; }
}
// This is the inner class. It has a member "model" that should not be modified
// but clients, but should be modified by the factory.
public class Car: ICarSetters
{
// explicitly implement the setter
string ICarSetters.model { set; }
// create a public getter
public string model { get; }
}
}
class Client
{
public Client()
{
Factory.Car car = Factory.CreateCar();
// can only read model because only the getter is public
// and ICarSetters is private to Factory
string model = car.model;
}
}
আমি এর জন্য স্পষ্ট ইন্টারফেস ব্যবহার করব।