Подтвердить что ты не робот

Пример делегирования java-контекста

Что такое делегирование в Java? Может ли кто-нибудь дать мне правильный пример?

4b9b3361

Ответ 1

Эта делегация - точно так же, как в реальном мире:

public interface Worker() {
  public Result work();
}

public class Secretary() implements Worker {

   public Result work() {
     Result myResult = new Result();
     return myResult;
   }    
}

public class Boss() implements Worker {

   private Secretary secretary;

   public Result work() {
     return secretary.work();
   }   
}

(Добавлен интерфейс Worker, чтобы приблизиться к шаблону Delegator)

Ответ 2

Если вы ссылаетесь на шаблон делегирования, wikipedia имеет отличный пример, написанный в java.

Я считаю, что более длинный пример вышеприведенной страницы - лучший:

interface I {
    void f();
    void g();
}

class A implements I {
    public void f() { System.out.println("A: doing f()"); }
    public void g() { System.out.println("A: doing g()"); }
}

class B implements I {
    public void f() { System.out.println("B: doing f()"); }
    public void g() { System.out.println("B: doing g()"); }
}

class C implements I {
    // delegation
    I i = new A();

    public void f() { i.f(); }
    public void g() { i.g(); }

    // normal attributes
    void toA() { i = new A(); }
    void toB() { i = new B(); }
}


public class Main {
    public static void main(String[] args) {
        C c = new C();
        c.f();     // output: A: doing f()
        c.g();     // output: A: doing g()
        c.toB();
        c.f();     // output: B: doing f()
        c.g();     // output: B: doing g()
    }
}

Ответ 3

Тот же пример, что и aioobe, но изменил имена классов на более интуитивные. Вывод аналогий с примерами реального мира.

    public static void main(String[] args) 
    {
            Boss boss = new Boss();
            boss.toDeveloper();
            boss.f(); 
            boss.g(); 

            boss.toSrDeveloper();
            boss.f(); 
            boss.g(); 
    }

interface I 
{
    void f();

    void g();
}

class Developer implements I {
    public void f() {
        System.out.println("Developer: f() is too hard for me.");
    }

    public void g() {
        System.out.println("Developer: g() is not in my domain.");
    }
}

class SrDeveloper implements I {
    public void f() {
        System.out.println("Sr. Developer: Okay, I'll see f()");
    }

    public void g() {
        System.out.println("Sr. Developer: I'll do g() too.");
    }
}

class Boss implements I 
{
    // delegation
    I i;

    public void f() {
        i.f();
    }

    public void g() {
        i.g();
    }

    void toDeveloper() {
        i = new Developer();
    }

    void toSrDeveloper() {
        i = new SrDeveloper();
    }
}