Aktív objektum
Az aktív objektum tervezési minta a végrehajtást és a metódus hívást szétválasztó minta, aminek célja, hogy kiküszöbölje az objektumokkal járó önvezérlési hibákat, valamint, hogy segítse a kommunikáció során az asszinkron metódusmeghívást és ütemezze a beérkező kéréseket.

A minta hat elemből áll:

 A proxyból, ami biztosítja az interfészeket a felhasználók felé, nyilvánosan hozzáférhető metódusokkal.
 Az interfészből, amelyik leírja, hogy az aktív objektum mely metódusai hívhatók.
 A felhasználók függőben lévő kérelmeinek a listájából.
 Az ütemezőből, amelyik dönt, hogy legközelebb melyik kérelmet hajtsa végre.
 A kivitelezőből, ami végrehajtja az aktív objektum metódust.
 A változóból, amiből a felhasználók/ügyfelek kiolvashatják az eredményt.

Példa 
Egy példa az aktív objektum mintáról, Java nyelven.

class OriginalClass
{
    private double val = 0.0;

    //
    void doSomething()
    {
        val = 1.0;
    }

    //
    void doSomethingElse()
    {
        val = 2.0;
    }
}

class BecomeActiveObject
{
    private double val = 0.0;
    private BlockingQueue<Runnable> dispatchQueue
            = new LinkedBlockingQueue<Runnable>();

    //
    public BecomeActiveObject()
    {
        new Thread(
                new Runnable()
                {
                    @Override
                    public void run()
                    {
                        while (true)
                        {
                            try
                            {
                                dispatchQueue.take().run();
                            } catch (InterruptedException e)
                            {   // okay, just terminate the dispatcher
                            }
                        }
                    }
                }
        ).start();
    }

    //
    void doSomething() throws InterruptedException
    {
        dispatchQueue.put(
                new Runnable()
                {
                    public void run() { val = 1.0; }
                }
        );
    }

    //
    void doSomethingElse() throws InterruptedException
    {
        dispatchQueue.put(
                new Runnable()
                {
                    public void run() { val = 2.0; }
                }
        );
    }
}

Java (alternatív) 
Egy másik példa, szintén Java nyelven.
public class AnotherActiveObject {
    private double val;
    
    // container for tasks
    // decides which request to execute next
    // asyncMode=true means our worker thread processes its local task queue in the FIFO order
    // only single thread may modify internal state
    private final ForkJoinPool fj = new ForkJoinPool(1, ForkJoinPool.defaultForkJoinWorkerThreadFactory, null, true);
    
    // implementation of active object method
    public void doSomething() throws InterruptedException {
        fj.execute(new Runnable() {
            @Override
            public void run() {
                val = 1.0;
            }
        });
    }
 
    // implementation of active object method
    public void doSomethingElse() throws InterruptedException {
        fj.execute(new Runnable() {
            @Override
            public void run() {
                val = 2.0;
            }
        });
    }
}

Jegyzetek

További információk 
 Active Object implementation in C++11

Fordítás 

Programtervezési minták
Java-kódpéldák
Az aktív objektum tervezési minta a végrehajtást és a metódus hívást szétválasztó minta , aminek célja , hogy kiküszöbölje az objektumokkal járó önvezérlési hibákat , valamint , hogy segítse a kommunikáció során az asszinkron metódusmeghívást és ütemezze a beérkező kéréseket . A minta hat elemből áll : A proxyból , ami biztosítja az interfészeket a felhasználók felé , nyilvánosan hozzáférhető metódusokkal . Az interfészből , amelyik leírja , hogy az aktív objektum mely metódusai hívhatók . A felhasználók függőben lévő kérelmeinek a listájából . Az ütemezőből , amelyik dönt , hogy legközelebb melyik kérelmet hajtsa végre . A kivitelezőből , ami végrehajtja az aktív objektum metódust . A változóból , amiből a felhasználók / ügyfelek kiolvashatják az eredményt . Példa Egy példa az aktív objektum mintáról , Java nyelven. class OriginalClass { private double val =0 ; / / void doSomething ( ) { val =0 ; } / / void doSomethingElse ( ) { val =0 ; } } class BecomeActiveObject { private double val =0 ; private BlockingQueue<Runnable> dispatchQueue = new LinkedBlockingQueue<Runnable> ( ) ; / / public BecomeActiveObject ( ) { new Thread ( new Runnable ( ) { @ Override public void run ( ) { while ( true ) { try { dispatchQueue.take ( ) .run ( ) ; } catch ( InterruptedException e ) { / / okay , just terminate the dispatcher } } } } ) .start ( ) ; } / / void doSomething ( ) throws InterruptedException { dispatchQueue.put ( new Runnable ( ) { public void run ( ) { val =0 ; } } ) ; } / / void doSomethingElse ( ) throws InterruptedException { dispatchQueue.put ( new Runnable ( ) { public void run ( ) { val =0 ; } } ) ; } } Java ( alternatív ) Egy másik példa , szintén Java nyelven . public class AnotherActiveObject { private double val ; / / container for tasks / / decides which request to execute next / / asyncMode=true means our worker thread processes its local task queue in the FIFO order / / only single thread may modify internal state private final ForkJoinPool fj = new ForkJoinPool ( 1 , ForkJoinPool.defaultForkJoinWorkerThreadFactory , null , true ) ; / / implementation of active object method public void doSomething ( ) throws InterruptedException { fj.execute ( new Runnable ( ) { @ Override public void run ( ) { val =0 ; } } ) ; } / / implementation of active object method public void doSomethingElse ( ) throws InterruptedException { fj.execute ( new Runnable ( ) { @ Override public void run ( ) { val =0 ; } } ) ; } } Jegyzetek További információk Active Object implementation in C++11 Fordítás Programtervezési minták Java-kódpéldák