এই উত্তরটি এবং এর প্রকৃত অর্থটি খুঁজে বের করতে কিছুক্ষণ সময় নিল । কয়েকটি উদাহরণ এটি আরও স্পষ্ট করা উচিত।
Proxy প্রথম:
public interface Authorization {
String getToken();
}
এবং :
// goes to the DB and gets a token for example
public class DBAuthorization implements Authorization {
@Override
public String getToken() {
return "DB-Token";
}
}
এবং এটির একজন আহ্বানকারী Authorization, খুব বোবা:
class Caller {
void authenticatedUserAction(Authorization authorization) {
System.out.println("doing some action with : " + authorization.getToken());
}
}
এতদূর অ-সাধারণ কিছু হয়নি, তাই না? একটি নির্দিষ্ট পরিষেবা থেকে একটি টোকেন পান, সেই টোকেনটি ব্যবহার করুন। এখন ছবিতে আরও একটি প্রয়োজনীয়তা আসবে, লগিং যুক্ত করুন: অর্থ প্রতিবার টোকেন লগ করুন। এটি এই ক্ষেত্রে সহজ, কেবল একটি তৈরি করুন Proxy:
public class LoggingDBAuthorization implements Authorization {
private final DBAuthorization dbAuthorization = new DBAuthorization();
@Override
public String getToken() {
String token = dbAuthorization.getToken();
System.out.println("Got token : " + token);
return token;
}
}
আমরা কীভাবে এটি ব্যবহার করব?
public static void main(String[] args) {
LoggingDBAuthorization loggingDBAuthorization = new LoggingDBAuthorization();
Caller caller = new Caller();
caller.authenticatedUserAction(loggingDBAuthorization);
}
লক্ষ্য করুন যে একটি উদাহরণ LoggingDBAuthorization ধারণ করেDBAuthorization । উভয় LoggingDBAuthorizationএবং DBAuthorization বাস্তবায়ন Authorization ।
- একটি প্রক্সি
DBAuthorizationবেস ইন্টারফেস ( Authorization) এর কিছু কংক্রিট বাস্তবায়ন ( ) ধরে রাখবে । অন্য কথায় একটি প্রক্সি জানে যে কী ঠিক করা হচ্ছে।
Decorator:
এটি Proxyইন্টারফেসের সাথে অনেকটা একইরকম শুরু হয় :
public interface JobSeeker {
int interviewScore();
}
এবং এটি একটি বাস্তবায়ন:
class Newbie implements JobSeeker {
@Override
public int interviewScore() {
return 10;
}
}
এবং এখন আমরা আরও অভিজ্ঞ প্রার্থী যুক্ত করতে চাই, এটি তার সাক্ষাত্কার স্কোর যুক্ত করে একে অপরের থেকে একটি যুক্ত করে JobSeeker:
@RequiredArgsConstructor
public class TwoYearsInTheIndustry implements JobSeeker {
private final JobSeeker jobSeeker;
@Override
public int interviewScore() {
return jobSeeker.interviewScore() + 20;
}
}
লক্ষ্য করুন আমি কীভাবে বললাম যে প্লাসটি অন্য জবসিকারের কাছ থেকে এসেছে , তা নয় Newbie । এ কী সজ্জিত করছে তা ঠিকDecorator জানে না , এটি কেবল সজ্জিত উদাহরণের চুক্তিটি (এটি সম্পর্কে জানে ) জানে । এখানে দ্রষ্টব্য রাখুন যে এটি একটির মতো নয় ; বিপরীতে, এটি সজ্জিত কি ঠিক জানেন।JobSeekerProxy
আপনি প্রশ্ন করতে পারেন যদি এই ক্ষেত্রে দুটি ডিজাইনের ধরণের মধ্যে আসলেই কোনও পার্থক্য আছে? আমরা কি Decoratorহিসাবে লিখতে চেষ্টা করেছি Proxy?
public class TwoYearsInTheIndustry implements JobSeeker {
private final Newbie newbie = new Newbie();
@Override
public int interviewScore() {
return newbie.interviewScore() + 20;
}
}
এটি অবশ্যই একটি বিকল্প এবং এই নিদর্শনগুলি কতটা নিকটবর্তী তা হাইলাইট করে; অন্যান্য উত্তরে বর্ণিত হিসাবে সেগুলি এখনও বিভিন্ন পরিস্থিতির জন্য তৈরি।