Observable

Status
Niet open voor verdere reacties.

savant11

Gebruiker
Lid geworden
7 jan 2008
Berichten
153
Dag allen,

ik heb dit:

Code:
public class ModelDuck implements Quackable {
    Observable observable;

    public ModelDuck(){
        observable = new Observable(this);
    }


        public void quack(){
       System.out.println("");
       notifyObservers();
   }

   public void registerObserver(Observer observer){
       observable.registerObserver(observer);
   }

   public void notifyObservers(){
       observable.notifyObservers();
   }
}

en de classe Observable:

Code:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Observer;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author savant
 */
public class Observable implements QuackObservable {
    ArrayList observers = new ArrayList();
    QuackObservable duck;

    public Observable(QuackObservable quack){
        this.duck = duck;
    }

    public void registerObserver(Observer observer){
        observers.add(observer);
        //observable.notifyObservers();
    }

    public void notifyObservers(){
        //notifyObservers();
        Iterator iterator = observers.iterator();
        while(iterator.hasNext()){
            Observer observer = (Observer)iterator.next();
            //observer.update(duck);
        }
    }


}

Code:
public interface Quackable extends QuackObservable {

    public void quack();
        //System.out.println("TestQuack");
        //notifyObservers();
}//End method

Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author savant
 */
public class DuckSimulator {


	public static void main(String[] args) {
		DuckSimulator simulator = new DuckSimulator();
		AbstractDuckFactory duckFactory = new CountingDuckFactory();

		simulator.simulate(duckFactory);
	}

	void simulate(AbstractDuckFactory duckFactory) {
		Quackable mallardDuck = duckFactory.createMallardDuck();
		Quackable redheadDuck = duckFactory.createRedheadDuck();
		Quackable rubberDuck  = duckFactory.createRubberDuck();
        Quackable gooseDuck   = new GooseAdapter(new Goose());

        //Quackable goose = new GooseAdapter(new Goose());

        Flock flockOfDucks = new Flock();

        flockOfDucks.add(redheadDuck);
        //flockOfDucks.add(duckCall);
        flockOfDucks.add(rubberDuck);
        flockOfDucks.add(gooseDuck);
        
        Flock flockOfMallard = new Flock();
        
        Quackable mallardOne = duckFactory.createMallardDuck();
       // Quackable mallardTwo = duckFactory.createMallardDuck();
       // Quackable mallardThree = duckFactory.createMallardDuck();
        //Quackable mallardFour = duckFactory.createMallardDuck();
        
        Quackable rubberOne = duckFactory.createRubberDuck();
        
        flockOfMallard.add(mallardOne);
       // flockOfMallard.add(mallardTwo);
       // flockOfMallard.add(mallardThree);
       // flockOfMallard.add(mallardFour);
        flockOfDucks.add(rubberOne);

        flockOfDucks.add(flockOfMallard);
        flockOfDucks.add(flockOfDucks);

       System.out.println("\nDuck Simulator: With Observer");

        Quackologist quackologist = new Quackologist();
		flockOfDucks.registerObserver(quackologist);
		simulate(flockOfDucks);


        

		System.out.println("\nDuck Simulator: With Abstract Factory");

		simulate(mallardDuck);
		simulate(redheadDuck);
		simulate(rubberDuck);
        simulate(gooseDuck);

		System.out.println("The ducks quacked " +
		                   QuackCounter.getQuacks() +
		                   " times");
	}

	void simulate(Quackable duck) {
		duck.quack();
	}
}

Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author savant
 */
public interface Observer {
    public void update(QuackObservable duck);
}

Maar nu geeft iet bij classe: ModelDuck bij deze regel:
Code:
 observable.registerObserver(observer);

ErrorMessage: registerObserver(java.util.Observer) in Observable cannot be applied to (Observer)
observable.registerObserver(observer);

Alvast enorm bedankt.

Niels.
 
Laatst bewerkt:
De code waar je je observer toevoegt zit hier niet bij, maar als ik de error zie lijkt het me dat je een Observer probeert toe te voegen aan observers die in feite geen Observer is (classname implements Observer)
 
Hoi GAB. Wat is jouw email?

Dan kan ik je wellicht hele project sturen.

Groet,

Niels.
 
Hoi GAB. Wat is jouw email?

Dan kan ik je wellicht hele project sturen.

Groet,

Niels.
Ik begrijp de frustratie als je ergens vast zit maar ik ga niet beginnen aan priveoplossingen. Zet je project als jar- of zipfile op een van de vele free file sharing sites en post hier de link. Het is in het begin wat omslachtig om een accountje aan te maken maar in de toekomst ga je er zeker nog gebruik van kunnen maken. Op die manier kunnen ook anderen meezoeken naar oplossingen. Trouwens als je enkel de java files in de zip steekt is ie waarschijnlijk nog kleiner dan 100KB en kan je em rechtstreeks aan de post koppelen.
 
Laatst bewerkt:
Hoi GAB,

ik heb wat classen erbij gevoegd:

De main classe en de Observer.

Groet,

Niels.
 
1) met welk programma werk je om te programmeren?

2) Wat er nodig is is de class van waar registerObserver (Observer o) wordt opgeroepen en de class die Observer implementeert

3) de methode is normaal van het type
public void update(Observable o, Object arg) {} , maar daarvoor kan ik weer niet genoeg van je code zien ==> je moet geen eigen interface aanmaken voor Observer maar gewoon java.util.Observer implementeren in de class die je Observable in het oog houdt. Ik ga nu vieren dat het weekend daar is, sorry;)
 
1)
3) de methode is normaal van het type
public void update(Observable o, Object arg) {} , maar daarvoor kan ik weer niet genoeg van je code zien ==> je moet geen eigen interface aanmaken voor Observer maar gewoon java.util.Observer implementeren in de class die je Observable in het oog houdt. Ik ga nu vieren dat het weekend daar is, sorry;)
Onderweg naar huis bedacht ik op eens dat dit de fout is natuurlijk: registerObserver verwacht een Observer van het type java.util.Observer maar jij hebt je eigen interface "Observer" aangemaakt en probeert die door te geven!
registerObserver(java.util.Observer) in Observable cannot be applied to (Observer)==>deze is niet van het type java.util.Observer maar je eigen interface. de error zegt het zelf.
 
Laatst bewerkt:
Hoi GAB,

ja, ik zie het nu ook, er zijn 2 verschillende Observers!.

Zal wel ff verbeteren.

in ieder geval thx.

Niels
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan