![]() |
State pattern in DELPHI
ich versuche gerade eine Anwendung über die Einführung eines State Pattern
( ![]() 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. |
AW: State pattern in DELPHI
Pack alles in ein
Delphi-Quellcode:
und schon geht es.
type
Allerdings geht Forward nur innerhalb einer Unit. Also die deklaration muss in der gleichen Unit erfolgen. |
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 04:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz