آموزش جاوا و اندروید

یادداشت های یک برنامه نویس معمولی

آموزش جاوا و اندروید

یادداشت های یک برنامه نویس معمولی

طبقه بندی موضوعی

مفهوم 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 هست.

 

لینک خوب

موافقین ۰ مخالفین ۰ ۹۹/۱۰/۰۹
میم دال

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی