samples/sidemeanings/src/org/apidesign/sidemeanings/NonMixed.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 10:04:50 +0200
changeset 208 897361847d12
child 326 1657c68af062
permissions -rw-r--r--
Making the example with MixedClass vs. NonMixed solution more real, so it can be unit tested
jtulach@208
     1
package org.apidesign.sidemeanings;
jtulach@208
     2
jtulach@208
     3
// BEGIN: sidemeanings.Mixed.Clean
jtulach@208
     4
public final class NonMixed {
jtulach@208
     5
    private int counter;
jtulach@208
     6
    private int sum;
jtulach@208
     7
    private final Provider impl;
jtulach@208
     8
    
jtulach@208
     9
    private NonMixed(Provider impl) {
jtulach@208
    10
        this.impl = impl;
jtulach@208
    11
    }
jtulach@208
    12
    public static NonMixed create(Provider impl) {
jtulach@208
    13
        NonMixed api = new NonMixed(impl);
jtulach@208
    14
        Callback callback = new Callback(api);
jtulach@208
    15
        impl.initialize(callback);
jtulach@208
    16
        return api;
jtulach@208
    17
    }
jtulach@208
    18
jtulach@208
    19
    public final int apiForClients() {
jtulach@208
    20
        int subclass = impl.toBeImplementedBySubclass();
jtulach@208
    21
        sum += subclass;
jtulach@208
    22
        return sum / counter;
jtulach@208
    23
    }
jtulach@208
    24
jtulach@208
    25
    public interface Provider {
jtulach@208
    26
        public void initialize(Callback c);
jtulach@208
    27
        public int toBeImplementedBySubclass();
jtulach@208
    28
    }
jtulach@208
    29
jtulach@208
    30
    public static final class Callback {
jtulach@208
    31
        NonMixed api;
jtulach@208
    32
        
jtulach@208
    33
        Callback(NonMixed api) {
jtulach@208
    34
            this.api = api;
jtulach@208
    35
        }
jtulach@208
    36
        public final void toBeCalledBySubclass() {
jtulach@208
    37
            api.counter++;
jtulach@208
    38
        }
jtulach@208
    39
    }
jtulach@208
    40
}
jtulach@208
    41
// END: sidemeanings.Mixed.Clean
jtulach@208
    42
jtulach@208
    43