مفهوم Delegation
سه شنبه, ۹ دی ۱۳۹۹، ۰۱:۴۹ ق.ظ
نمایندگی یا Delegation
اگر کلاس A رو داشته باشیم و بخواهیم عملکردهای کلاس B رو هم داشته باشه، دو روش وجود داره:
1. استفاده از وراثت یا inheritance
2. استفاده از Delegation - در این حالت یک شی از B به A پاس میدیم. در این صورت کارهایی که B میتونست انجام بده رو A هم میتونه.
مفهوم Delegation: واگذار کردن کارها از یک Object به Object دیگه. در واقع همون composition هست.
مثال:
class Logger {
void logAll() {
print("Logger.logAll()");
}
}
class Controller {
private Logger logger;
public Controller(Logger logger) {
this.logger = logger;
}
void logAll() {
logger.logAll();
}
}
class Delegation {
public static void main(String[] args) {
Logger logger = new Logger();
Controller controller = new Controller(logger);
controller.logAll(); // ==> Logger.logAll()
}
}
در این حالت کلاس controller یکی از عملکردهاش که نوشتن لاگ هست رو از کلاس Logger گرفته.
روش اصولی تر کد بالا:
interface Logger {
void logAll();
}
class FileLogger implements Logger {
@Override
public void logAll() {
File logFile = new File("/path/to/logFile.txt");
FileWriter fileWriter = new FileWriter(logFile);
fileWriter.write("FileLogger.logAll()");
}
}
class ConsoleLogger implements Logger {
@Override
public void logAll() {
print("ConsoleLogger.logAll()");
}
}
class Controller implements Logger {
private Logger logger;
public Controller(Logger logger) {
this.logger = logger;
}
@Override
public void logAll() {
logger.logAll();
}
}
class Delegation {
public static void main(String[] args) {
Logger fileLogger = new FileLogger();
Logger consoleLogger = new ConsoleLogger();
new Controller(fileLogger).logAll();
new Controller(consoleLogger).logAll();
}
}
کلاس Logger در اینجا Delegation هست.
یعنی اگر کلاسی اینترفیسی رو پیاده سازی میکنه، اون اینترفیس در حکم Delegation هست.
۹۹/۱۰/۰۹