উদাহরণস্বরূপ, বিবেচনা করুন আমার অন্যান্য ক্লাসগুলির প্রসারিত করার জন্য একটি ক্লাস রয়েছে:
public class LoginPage {
public String userId;
public String session;
public boolean checkSessionValid() {
}
}
এবং কিছু উপশ্রেণী:
public class HomePage extends LoginPage {
}
public class EditInfoPage extends LoginPage {
}
প্রকৃতপক্ষে, সাবক্লাসের ওভাররাইড করার কোনও পদ্ধতি নেই, এছাড়াও আমি জেনেরিক উপায়ে হোমপেজ অ্যাক্সেস করতে পারি না, যেমন: আমি এর মতো কিছু করব না:
for (int i = 0; i < loginPages.length; i++) {
loginPages[i].doSomething();
}
আমি শুধু লগইন পৃষ্ঠা পুনরায় ব্যবহার করতে চাই। তবে https://stackoverflow.com/a/53354 অনুসারে আমার এখানে রচনাটি পছন্দ করা উচিত কারণ আমার লগইনপেজ ইন্টারফেসের প্রয়োজন নেই, তাই আমি এখানে উত্তরাধিকার ব্যবহার করি না:
public class HomePage {
public LoginPage loginPage;
}
public class EditInfoPage {
public LoginPage loginPage;
}
তবে সমস্যাটি এখানে আসে নতুন সংস্করণে কোডটি:
public LoginPage loginPage;
সদৃশ যখন একটি নতুন ক্লাস যুক্ত করা হয়। এবং যদি লগইনপেজের সেটার এবং গেটর দরকার হয় তবে আরও কোড অনুলিপি করা দরকার:
public LoginPage loginPage;
private LoginPage getLoginPage() {
return this.loginPage;
}
private void setLoginPage(LoginPage loginPage) {
this.loginPage = loginPage;
}
সুতরাং আমার প্রশ্নটি হচ্ছে, "শুকনো নীতি" লঙ্ঘন করে কি "রচনা ওভার ইনরিয়েন্স"?
extends LoginPage
পুরো জায়গা জুড়ে সদৃশ । মেট চেক করুন!
LoginPage
ডেকরেটার তৈরি করুন। আর কোনও সদৃশ হবে না, কেবল একটি সরল page = new LoginPage(new EditInfoPage())
এবং আপনার কাজ শেষ। অথবা আপনি প্রমাণীকরণ মডিউলটি যে কোনও পৃষ্ঠাতে গতিশীলভাবে যুক্ত হতে পারে তা করতে ওপেন-ক্লোজড-নীতিটি ব্যবহার করেন। কোড ডুপ্লিকেশনকে মোকাবেলা করার প্রচুর উপায় রয়েছে, মূলত একটি নতুন বিমূর্ততা সন্ধানের সাথে জড়িত। LoginPage
সম্ভবত একটি খারাপ নাম, আপনি যা নিশ্চিত করতে চান সেটি হ'ল ব্যবহারকারীটি সেই পৃষ্ঠাটি ব্রাউজ করার সময় প্রমাণীকরণ করা হয় , যখন তাকে পুনঃনির্দেশিত করা হয় LoginPage
বা তিনি না থাকলে একটি সঠিক ত্রুটি বার্তা দেখানো হয়।