Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   State pattern in DELPHI (https://www.delphipraxis.net/208802-state-pattern-delphi.html)

bernhard_LA 15. Sep 2021 12:10

State pattern in DELPHI
 
ich versuche gerade eine Anwendung über die Einführung eines State Pattern
(https://sourcemaking.com/design_patterns/state )
zu verbessern.
Aktuell scheitere ich daran die State Klasse in meiner zweiten unit zu definieren, in dieser unit ist die
eigentlich Klasse ja nur über eine foreward deklaration bekannt. Was mache ich hier falsch ?




Delphi-Quellcode:


unit TProcessor;
///
///     unit 1  mit der Klasse die zukünftig auch eine State class bekommen soll
///
interface

uses Types, Classes;

implementation

type
    TProcessor = class ()
 
    FState : TProcessStatesClass;  //  kommt dann noch


    function GetState : TProcessStatesClass;
    procedure SetState(const Value : TProcessStatesClass);

    end;



end.


unit ProcessStates;
///
///     unit 2  mit der Ober-Klasse für die states
///

interface

uses Types, Classes;

implementation

type

     TProcessor = class; // // Forward declaration
     TProcessStatesClass = class of TProcessStates;

type TProcessStates = class(TObject)

private

    FProcessor : TProcessor ;

public


end;


end.

Sinspin 15. Sep 2021 13:07

AW: State pattern in DELPHI
 
Pack alles in ein
Delphi-Quellcode:
type
und schon geht es.
Allerdings geht Forward nur innerhalb einer Unit. Also die deklaration muss in der gleichen Unit erfolgen.

jaenicke 15. Sep 2021 14:14

AW: State pattern in DELPHI
 
Du möchtest in ProcessStates den Typ TProcessor aus der Unit TProcessor nutzen. Dann musst du die Unit auch unter uses eintragen. Forward nutzt dir da rein gar nichts, das hat eine ganz andere Funktion.

Es ist aber eine sehr schlechte Idee, wenn eine Unit genauso heißt wie der Typ darin (TProcessor).

Ich verstehe allerdings noch nicht was du da eigentlich vor hast. Irgendwie passt der Quelltext nicht so recht zum State Design Pattern. Denn das class of hilft dir da wenig weiter, wenn es um die Implementierung der Aktionen in einer abgeleiteten (!!) Klasse geht. Es geht bei dem Pattern nicht darum den Klassentyp zu wechseln, sondern die Implementierung abhängig vom Zustand!


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf