Methoden-Pointer?

Status
Nicht offen für weitere Antworten.

napwatcher

Mitglied
Hallo zusammen,

ich portiere gerade eine Anwendung von Delphi nach Java und habe folgendes Design-Problem:

Meine Klasse in Delphi sieht gekürzt so aus: Wichtig darin ist das Proc-array - ein Zeiger auf Objektprozeduren von TParser ( wie z.B. zahl, buchstabe oder andere )

Code:
type
  TParser = class(TObject)
  public
   [b] Proc : array of procedure of objects;[/b]
    Zahlen : array[0..100] of extended;
   procedure zahl;
   procedure buchstabe;
   procedure metacode;
   procedure start;
  end;

In der Prozedur TParser.metacode fülle ich das Proc-array folgendermaßen mit Pointern auf die Prozeduren zahl/buchstabe und weitere von TParser.

z.B.: Proc[p] := zahl;


procedure "start" ruft dann die Proc-Prozeduren nacheinander auf.... .
...
...
nun möchte ich diese gleiche Funktionalität - also Aufrufe von Methoden über einen "Methoden-pointer" in Java implementieren, was mich aufgrund des Pointerverbots vor ein großes Problem stellt. (vielleicht geht es auch gar nicht).

Wenn jemand eine alternative Idee hätte, um diese Funktionalität zu erhalten, wäre ich sehr froh!

napwatcher
 

ARadauer

Top Contributor
gibt keine Funktionspainter in java, stimmt.

Du kannst dir ja mal das Command Pattern ansehen, es dient dazu, um verhalten in einer Klasse zu kapseln.

du hast ein Interface, dass deine Methode beinhaltet. Du erstellt ein paar Klassen die diene Prozduren darstellen, die alle dieses Interface implementieren.

Instanzen dieser Klassen kannst du dann in ein Array packen, drüber itterieren und die methoden aufrufen.
 

ARadauer

Top Contributor
jetzt wo ich das beschrieben habe, bin ich mir nicht mehr sicher ob das nicht doch ein strategy pattern ist.

wo war da nochmal genau der unterschied?? strategy vs command pattern?
 

AlArenal

Top Contributor
napwatcher hat gesagt.:
... was mich aufgrund des Pointerverbots vor ein großes Problem stellt.

Es gibt kein Pointerverbot in Java. Es gibt nur einfach keine Pointer ;) (jedenfalls nicht im klassischen Sinne als direkt manipulierbare Adresszeiger)
 
M

maki

Gast
ARadauer hat gesagt.:
jetzt wo ich das beschrieben habe, bin ich mir nicht mehr sicher ob das nicht doch ein strategy pattern ist.

wo war da nochmal genau der unterschied?? strategy vs command pattern?
Command pattern verstehe ich so, dass eine Aktion in eine Klasse gekapselt wird, Strategy kapeselt imho einen Algorythmus und State einen Zustand.

Diese Mustern sind alle sehr ähnlich, kommt auf den Anwendungsfall an, im Endeffekt sind alle nur Polymorphie ;)
 

napwatcher

Mitglied
Habe mich durch die Reflection-Klassen gelesen und bin ganz erstaunt, was da alles jetzt so möglich ist.
Und auch mein Problem kann man relativ einfach umsetzen.

Folgender Link enthält auch das untere Lösungsbeispiel und erklärt sehr schön die Zusammenhänge

Hier ein sehr schönes Beispiel




Code:
package test2;

interface DynamBase
{
  void meth();
}

class DynamBaseMethod implements DynamBase
{
  public void meth()
  {
    System.out.println( "Bewusste Raucher trinken Filterkaffee" );
  }
}

class DynamAbstract
{
  public static void main( String args[] ) throws Exception
  {
    Class clazz = Class.forName( "test2.DynamBaseMethod" );

    DynamBase o = (DynamBase) clazz.newInstance();

    o.meth();
  }
}


Vielen Dank für Eure Hinweise - hätte sonst ewig gesucht!
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben