stat | |
---|---|
stat | |
Sorts | beteendemässiga |
Beskrivs i Design Patterns | Ja |
State ( Eng. State ) är ett beteendedesignmönster . Det används i de fall då objektet under körningen av programmet måste ändra sitt beteende beroende på dess tillstånd.
Mönstret består av 3 block:
Widget är en klass vars objekt bör ändra sitt beteende beroende på tillstånd.
IState är ett gränssnitt som var och en av de konkreta staterna måste implementera. Genom detta gränssnitt interagerar Widget-objektet med staten genom att delegera metodanrop till det. Gränssnittet bör innehålla medel för återkoppling till objektet vars beteende ska ändras. För detta används en händelse ( mönsterförlag - Prenumerant ). Detta är nödvändigt för att ersätta tillståndsobjektet under körningen av programmet när händelser inträffar. Det kan finnas tillfällen då widgeten själv regelbundet avfrågar tillståndsobjektet för en övergång.
StateA ... StateZ - klasser av konkreta tillstånd. Bör innehålla information om under vilka förhållanden och i vilka tillstånd objektet kan passera från nuvarande tillstånd. Till exempel kan ett objekt gå från StateA till StateB och StateC, och från StateB tillbaka till StateA, och så vidare. Objektet för en av dem måste innehålla widgeten när den skapas.
Att tillämpa detta mönster kan vara svårt om stater behöver kommunicera, eller om ett tillstånd anger egenskaperna för ett annat. I det här fallet behöver du ett globalt objekt, vilket inte är en särskilt bra arkitektonisk lösning.
Applicera en mall
Källtext i C# använder System ; namnutrymme Digital_Patterns.Behavioral.State { offentligt gränssnitt IAutomatState { String GotApplication (); StringCheckApplication ( ); String RentApartment (); StringDispenseKeys ( ); } offentligt gränssnitt IAutomat { void GotApplication (); void CheckApplication (); ogiltig RentApartment (); void SetState ( IAutomatState s ); IAutomatState GetWaitingState (); IAutomatState GetGotApplicationState (); IAutomatState GetApartmentRentedState (); IAutomatState GetFullyRentedState (); Int32 Count { get ; set ; } } public class Automat : IAutomat { privat IAutomatState _waitingState ; privat IAutomatState _gotApplicationState ; privat IAutomatState _apartmentRentedState ; privat IAutomatState _fullyRentedState ; privat IAutomatState _state ; privat Int32_count ; _ public Automat ( Int32 n ) { _count = n ; _waitingState = new WaitingState ( detta ); _gotApplicationState = new GotApplicationState ( detta ); _apartmentRentedState = new ApartmentRentedState ( denna ); _fullyRentedState = new FullyRentedState ( detta ); _state = _waitingState ; } public void GotApplication () { Console . WriteLine ( _state.GotApplication ( ) ); } public void CheckApplication () { Console . WriteLine ( _state.CheckApplication ( ) ); } public void RentApartment () { Console . WriteLine ( _state.RentApartment ( ) ); Konsol . WriteLine ( _state . DispenseKeys ()); } public void SetState ( IAutomatState s ) { _state = s ; } public IAutomatState GetWaitingState () { return _waitingState ; } public IAutomatState GetGotApplicationState () { return _gotApplicationState ; } public IAutomatState GetApartmentRentedState () { return _apartmentRentedState ; } public IAutomatState GetFullyRentedState () { return _fullyRentedState ; } public int Count { get { return _count ; } set { _count = värde ; } } } public class WaitingState : IAutomatState { privat Automat _automat ; public WaitingState ( Automat automat ) { _automat = automat ; } public String GotApplication () { _automat . SetState ( _automat . GetGotApplicationState ()); return "Tack för ansökan." ; } public String CheckApplication () { return "Du måste skicka in en ansökan." ; } public String RentApartment () { return "Du måste skicka in en ansökan." ; } public String DispenseKeys () { return "Du måste skicka in en ansökan." ; } } public class GotApplicationState : IAutomatState { privat Automat _automat ; privat skrivskyddad Slumpmässig _random ; public GotApplicationState ( Automat automat ) { _automat = automat ; _random = new Random ( System . DateTime . Now . Millisecond ); } public String GotApplication () { return "Vi har redan din ansökan." ; } public String CheckApplication () { var yesNo = _random . Nästa () % 10 ; if ( yesNo > 4 && _automat . Count > 0 ) { _automat . SetState ( _automat . GetApartmentRentedState ()); return "Grattis, du blev godkänd." ; } annat { _automatic . SetState ( _automat . GetWaitingState ()); return "Tyvärr, du blev inte godkänd." ; } } public String RentApartment () { return "Du måste ha din ansökan kontrollerad." ; } public String DispenseKeys () { return "Du måste ha din ansökan kontrollerad." ; } } public class ApartmentRentedState : IAutomatState { privat Automat _automat ; public ApartmentRentedState ( Automat automat ) { _automat = automat ; } public String GotApplication () { return "Vänta på, vi hyr en lägenhet till dig." ; } public String CheckApplication () { return "Vänta på, vi hyr en lägenhet till dig." ; } public String RentApartment () { _automat . Räkna = _automat . Räkna - 1 ; return "Hyr en lägenhet till dig...." ; } public String DispenseKeys () { if ( _automat . Count <= 0 ) _automat . SetState ( _automat . GetFullyRentedState ()); annat _automatiskt . SetState ( _automat . GetWaitingState ()); returnera "Här är dina nycklar!" ; } } public class FullyRentedState : IAutomatState { privat Automat _automat ; public FullyRentedState ( Automat automat ) { _automat = automat ; } public String GotApplication () { return "Tyvärr, vi är helt uthyrda." ; } public String CheckApplication () { return "Tyvärr, vi är helt uthyrda." ; } public String RentApartment () { return "Tyvärr, vi är helt uthyrda." ; } public String DispenseKeys () { return "Tyvärr, vi är helt uthyrda." ; } } class Program { static void Main ( sträng [] args ) { var automat = new Automat ( 9 ); automat . GotApplication (); automat . CheckApplication (); automat . RentApartment (); } } }Samma exempel, utan att använda mallen
Källtext i C# använder System ; namnrymden Digital_Patterns.Behavioral.State { public enum State { FULLY_RENTED = 0 , WAITING = 1 , GOT_APPLICATION = 2 , APARTMENT_RENTED = 3 , } public class RentalMethods { private readonly Random _random ; privat Int32 _numberApartments ; privat stat _stat = stat . VÄNTAR ; public RentalMethods ( Int32 n ) { _numberApartments = n ; _random = new Random ( System . DateTime . Now . Millisecond ); } public void GetApplication () { switch ( _state ) { case State . FULLY_RENTED : Konsol . WriteLine ( "Tyvärr, vi är helt uthyrda." ); bryta ; fall stat . WAITING : _state = Tillstånd . GOT_APPLICATION ; Konsol . WriteLine ( "Tack för ansökan." ); bryta ; fall stat . GOT_APPLICATION : Konsol . WriteLine ( "Vi har redan din ansökan." ); bryta ; fall stat . APARTMENT_RENTED : Konsol . WriteLine ( "Vänta på, vi hyr en lägenhet till dig." ); bryta ; } } public void CheckApplication () { var yesNo = _random . nästa ()% 10 ; switch ( _state ) { case State . FULLY_RENTED : Konsol . WriteLine ( "Tyvärr, vi är helt uthyrda." ); bryta ; fall stat . VÄNTAR : Konsol . WriteLine ( "Du måste skicka in en ansökan." ); bryta ; fall Stat . GOT_APPLICATION : if ( yesNo > 4 && _numberApartments > 0 ) { Console . WriteLine ( "Grattis, du blev godkänd." ); _state = Tillstånd . APARTMENT_RENTED ; RentApartment (); } annat { Konsol . WriteLine ( "Tyvärr, du blev inte godkänd." ); _state = Tillstånd . VÄNTAR ; } bryta ; fall Stat . APARTMENT_RENTED : Konsol . WriteLine ( "Vänta på, vi hyr en lägenhet till dig." ); bryta ; } } public void RentApartment () { switch ( _state ) { case State . FULLY_RENTED : Konsol . WriteLine ( "Tyvärr, vi är helt uthyrda." ); bryta ; fall stat . VÄNTAR : Konsol . WriteLine ( "Du måste skicka in en ansökan." ); bryta ; fall stat . GOT_APPLICATION : Konsol . WriteLine ( "Du måste ha din ansökan kontrollerad." ); bryta ; fall stat . APARTMENT_RENTED : Konsol . WriteLine ( "Hyr en lägenhet till dig...." ); _numberApartments --; DispenseKeys (); bryta ; } } public void DispenseKeys () { switch ( _state ) { case State . FULLY_RENTED : Konsol . WriteLine ( "Tyvärr, vi är helt uthyrda." ); bryta ; fall Stat . VÄNTAR : Konsol . WriteLine ( "Du måste skicka in en ansökan." ); bryta ; fall Stat . GOT_APPLICATION : Konsol . WriteLine ( "Du måste ha din ansökan kontrollerad." ); bryta ; fall Stat . APARTMENT_RENTED : Konsol . WriteLine ( "Här är dina nycklar!" ); _state = Tillstånd . VÄNTAR ; bryta ; } } } class Program { static void Main ( string [] args ) { var rentalMethods = new RentalMethods ( 9 ); uthyrningsmetoder . GetApplication (); uthyrningsmetoder . CheckApplication (); uthyrningsmetoder . RentApartment (); uthyrningsmetoder . DispenseKeys (); } } }Ett exempel med att byta stater från stat.
Källtext i javascript // "gränssnitt" Status function State () { this . someMethod = function () { }; detta . nextState = funktion () { }; } // statligt genomförande // first state function StateA ( widjet ) { var duplicate = this ; // referens till det instansierade objektet (eftersom detta kan ändras) detta . someMethod = function () { alert ( "StateA.someMethod" ); duplicera . nästa tillstånd (); }; detta . nextState = function () { alert ( "StateA > StateB" ); widget . onNextState ( ny StateB ( widjet ) ); }; } StateA . prototyp = nytt tillstånd (); StateA . prototyp . konstruktor = StateA ; // andra tillståndsfunktion StateB ( widjet ) { var duplicate = this ; detta . someMethod = function () { alert ( "StateB.someMethod" ); duplicera . nästa tillstånd (); }; detta . nextState = function () { alert ( "StateB > StateA" ); widget . onNextState ( new StateA ( widjet ) ); }; } StateB . prototyp = nytt tillstånd (); StateB . prototyp . konstruktor = StateB ; // Widget "gränssnitt" function Widget () { detta . someMethod = function () { }; detta . onNextState = funktion ( tillstånd ) { }; } // Widgetimplementering function Widget1 () { var state = new StateA ( this ); detta . someMethod = function () { state . någon metod (); }; detta . onNextState = function ( newState ) { state = newState ; }; } Widget1 . prototyp = ny widget (); Widget1 . prototyp . konstruktor = Widget1 ; // användning var widget = ny widget1 (); widget . någon metod (); // StateA.someMethod // StateA > StateB- widget . någon metod (); // StateB.someMethod // StateB > StateAÄndra tillstånd genom att anropa en metod på widgeten (från den engelska versionen av artikeln).
Källtext i javascript // "gränssnitt" Status function AbstractTool () { this . moveTo = funktion ( x , y ) { }; detta . mouseDown = funktion ( x , y ) { }; detta . mouseUp = funktion ( x , y ) { }; } // statligt genomförande // pencil tool function PenTool ( widjet ) { var duplicate = this ; // referens till det instansierade objektet (eftersom detta kan ändras) var mouseIsDown = false ; // musknappen är för närvarande inte nedtryckt var lastCoords = []; // tidigare koordinater för muspekaren detta . moveTo = function ( x , y ) { if ( mouseIsDown && lastCoords . length ) { drawLine ( lastCoords , [ x , y ]); } lastCoords = [ x , y ]; }; detta . mouseDown = funktion ( x , y ) { mouseIsDown = true ; lastCoords = [ x , y ]; }; detta . mouseUp = funktion ( x , y ) { mouseIsDown = false ; }; function drawLine ( coords1 , coords2 ) { alert ( "drawLine: [" + coords1 [ 0 ] + ", " + coords1 [ 1 ] + "] - [" + coords2 [ 0 ] + ", " + coords2 [ 1 ] + "]" ); } } PenTool . prototyp = nytt abstraktverktyg (); pentool . prototyp . konstruktor = PenTool ; // Selection Tool function SelectionTool ( widget ) { var duplicate = this ; // referens till det instansierade objektet (eftersom detta kan ändras) var mouseIsDown = false ; // musknappen är för närvarande inte nedtryckt var startCoords = []; // koordinater för muspekaren när knappen klickas detta . moveTo = function ( x , y ) { if ( mouseIsDown ) { setSelection ( startCoords , [ x , y ]); } }; detta . mouseDown = function ( x , y ) { startCoords = [ x , y ]; mouseIsDown = sant ; }; detta . mouseUp = funktion ( x , y ) { mouseIsDown = false ; }; function setSelection ( coords1 , coords2 ) { alert ( "setSelection: [" + coords1 [ 0 ] + ", " + coords1 [ 1 ] + "] - [" + coords2 [ 0 ] + ", " + coords2 [ 1 ] + "]" ); } }; Selection Tool . prototyp = nytt abstraktverktyg (); Selection Tool . prototyp . konstruktor = SelectionTool ; // Widgetimplementering function DrawingController () { var currentTool = new SelectionTool (); // aktivt instrument detta . moveTo = function ( x , y ) { currentTool . flytta Till ( x , y ); }; detta . mouseDown = funktion ( x , y ) { currentTool . mouseDown ( x , y ); }; detta . mouseUp = funktion ( x , y ) { currentTool . mouseUp ( x , y ); }; detta . selectPenTool = function () { // välj områdesvalsverktyget currentTool = new PenTool (); }; detta . selectSelectionTool = function () { // välj pennverktyget currentTool = new SelectionTool (); }; } var widget = new DrawingController (); widget . mus ner ( 1 , 1 ); widget . flytta Till ( 1 , 2 ); // setSelection: [1, 1] - [1, 2] widget . flytta Till ( 1 , 3 ); // setSelection: [1, 1] - [1, 3] widget . mouseUp ( 1 , 3 ); widget . flytta Till ( 1 , 4 ); widget . selectPenTool (); widget . mus ner ( 1 , 1 ); widget . flytta Till ( 1 , 2 ); // drawLine: [1, 1] - [1, 2] widget . flytta Till ( 1 , 3 ); // drawLine: [1, 2] - [1, 3] widget . mouseUp ( 1 , 3 ); widget . flytta Till ( 1 , 4 );Applicera en mall
Källtext på språket VB.NET Namnutrymme Digital_Patterns.Behavioral.State Public Interface IAutomatState Funktion GotApplication () Som [ String ] Funktion CheckApplication () Som [ String ] Funktion RentApartment () Som [ String ] Funktion DispenseKeys ( ) Som [ String ] Slutgränssnitt Public Interface IAutomat Sub GotApplication () Sub CheckApplication () Sub RentApartment () Sub SetState ( ByVal s As IAutomatState ) Funktion GetWaitingState () Som IAutomatState Funktion GetGotApplicationState () Som IAutomatState Funktion GetApartmentRentedState () Som IAutomatState Funktion GetFullyRentedState () Som IAutomatState Property Count () Som Int32 End Interface Public Class Automat implementerar IAutomat Private _waitingState As IAutomatState Private _gotApplicationState As IAutomatState Private _apartmentRentedState As IAutomatState Private _fullyRentedState As IAutomatState Private _state As IAutomatState Private _count As Int32 Public Sub New ( ByVal n As Int32 ) _count = n _waitingState = New WaitingState ( Me ) _gotApplicationState = New GotApplicationState ( Me ) _apartmentRentedState = New ApartmentRentedState ( Me ) _StatfullyRentedState = New FullyRentedState = New FullyRentedState _ Endstate Substate _ _ Public Sub GotApplication () Implementerar IAutomat . GotApplicationConsole . _ WriteLine ( _state.GotApplication ( ) ) End Sub Public Sub CheckApplication () Implementerar IAutomat . CheckApplication Console . WriteLine ( _state . CheckApplication ()) End Sub Public Sub RentApartment () Implementerar IAutomat . RentApartment Console . WriteLine ( _state . RentApartment ()) Konsol . WriteLine ( _state . DispenseKeys ()) End Sub Public Sub SetState ( ByVal s As IAutomatState ) Implementerar IAutomat . SetState _state = s End Sub Offentlig funktion GetWaitingState () Eftersom IAutomatState implementerar IAutomat . GetWaitingState Return _waitingState Slutfunktion _ Offentlig funktion GetGotApplicationState () Eftersom IAutomatState implementerar IAutomat . GetGotApplicationState Return _gotApplicationState Slutfunktion _ Offentlig funktion GetApartmentRentedState () Eftersom IAutomatState implementerar IAutomat . GetApartmentRentedState Return _apartmentRentedState Slutfunktion _ Offentlig funktion GetFullyRentedState () Eftersom IAutomatState implementerar IAutomat . GetFullyRentedState Return _fullyRentedState Slutfunktion _ Public Property Count () Som heltal implementerar IAutomat . Count Get Return _count End Get Set ( ByVal value As Integer ) _count = value End Set End Property End Class Public Class WaitingState Implementerar IAutomatState Private _automat As Automat Public Sub New ( ByVal automat As Automat ) _automat = automat End Sub Public Function GotApplication () Som [ String ] Implementerar IAutomatState . GotApplication_automat . _ SetState ( _automat . GetGotApplicationState ()) Returnera "Tack för ansökan." slutfunktion _ Public Function CheckApplication () Som [ String ] Implementerar IAutomatState . CheckApplication Return "Du måste skicka in en ansökan." slutfunktion _ Public Function RentApartment () Som [ String ] Implementerar IAutomatState . RentApartment Return "Du måste skicka in en ansökan." slutfunktion _ Public Function Dispense Keys () Som [ String ] Implementerar IAutomatState . DispenseKeys Return "Du måste skicka in en ansökan." Slutfunktion Slutklass _ _ Public Class GotApplicationState implementerar IAutomatState Private _automat As Automat Private ReadOnly _random As Random Public Sub New ( ByVal automat As Automat ) _automat = automat _random = New Random ( System . DateTime . Now . Millisecond ) End Sub Public Function GotApplication () Som [ String ] Implementerar IAutomatState . GotApplication Return "Vi har redan din ansökan." slutfunktion _ Public Function CheckApplication () Som [ String ] Implementerar IAutomatState . CheckApplication Dim yesNo = _random . [ Nästa ] () Mod 10 Om jaNej > 4 OchOckså _automat . Räkna > 0 Sedan _automat . SetState ( _automat . GetApartmentRentedState ()) Returnera "Grattis, du blev godkänd." Annars _automatisk . SetState ( _automat . GetWaitingState ()) Returnera "Tyvärr, du blev inte godkänd." End If End -funktion Public Function RentApartment () Som [ String ] Implementerar IAutomatState . RentApartment Return "Du måste ha din ansökan kontrollerad." slutfunktion _ Public Function Dispense Keys () Som [ String ] Implementerar IAutomatState . DispenseKeys Return "Du måste ha din ansökan kontrollerad." Slutfunktion Slutklass _ _ Public Class ApartmentRentedState Implementerar IAutomatState Private _automat As Automat Public Sub New ( ByVal automat As Automat ) _automat = automat End Sub Public Function GotApplication () Som [ String ] Implementerar IAutomatState . GotApplication Return "Vänta på, vi hyr en lägenhet till dig." slutfunktion _ Public Function CheckApplication () Som [ String ] Implementerar IAutomatState . CheckApplication Return "Vänta på, vi hyr en lägenhet till dig." slutfunktion _ Public Function RentApartment () Som [ String ] Implementerar IAutomatState . RentApartment _automat . Räkna = _automat . Räkna - 1 Return "Hyr en lägenhet till dig...." Avsluta funktion Public Function Dispense Keys () Som [ String ] Implementerar IAutomatState . DispenseKeys If _automat . Räkna <= 0 Sedan _automat . SetState ( _automat . GetFullyRentedState ()) Else _automat . SetState ( _automat . GetWaitingState ()) End If Return "Här är dina nycklar!" Slutfunktion Slutklass _ _ Public Class FullyRentedState Implementerar IAutomatState Private _automat As Automat Public Sub New ( ByVal automat As Automat ) _automat = automat End Sub Public Function GotApplication () Som [ String ] Implementerar IAutomatState . GotApplication Return "Tyvärr, vi är helt uthyrda." slutfunktion _ Public Function CheckApplication () Som [ String ] Implementerar IAutomatState . CheckApplication Return "Tyvärr, vi är fullt uthyrda." slutfunktion _ Public Function RentApartment () Som [ String ] Implementerar IAutomatState . RentApartment Return "Tyvärr, vi är fullt uthyrda." slutfunktion _ Public Function Dispense Keys () Som [ String ] Implementerar IAutomatState . DispenseKeys Return "Tyvärr, vi är fullt uthyrda." Slutfunktion Slutklass _ _ Klass Program Delad Sub Main () Dim automat = New Automat ( 9 ) automat . GotApplication () automat . CheckApplication () automat . RentApartment () Konsol . Läs () End Sub End Class End NamespaceSamma exempel, utan att använda mallen
Källtext på språket VB.NET Namnutrymme Digital_Patterns.Behavioral.State Public Enum State FULLY_RENTED = 0 WAITING = 1 GOT_APPLICATION = 2 APARTMENT_RENTED = 3 Slut Enum Public Class RentalMethods Private ReadOnly _random As Random Private _numberApartments As Int32 Private _state As State = State . VÄNTAR Public Sub New ( ByVal n As Int32 ) _numberApartments = n _random = New Random ( System . DateTime . Now . Millisecond ) End Sub Public Sub GetApplication () Välj Fall _state Fall State . FULLY_RENTED Konsol . WriteLine ( "Tyvärr, vi är helt uthyrda. " ) Avsluta Välj ärendestatus . WAITING_state = Tillstånd . _ GOT_APPLICATION- konsol . WriteLine ( "Tack för ansökan. " ) Avsluta Välj ärendestatus . GOT_APPLICATION- konsol . WriteLine ( "Vi har redan din ansökan. " ) Avsluta Välj ärendestatus . APARTMENT_RENTED Konsol . WriteLine ( "Vänta, vi hyr en lägenhet till dig." ) Avsluta Välj Avsluta Välj Avsluta Sub Public Sub CheckApplication () Dim yesNo = _random . [ Nästa ] () Mod 10 Välj Case _state Case State . FULLY_RENTED Konsol . WriteLine ( "Tyvärr, vi är helt uthyrda. " ) Avsluta Välj ärendestatus . VÄNTA Konsol . WriteLine ( "Du måste skicka in en ansökan. " ) Avsluta Välj ärendestatus . GOT_APPLICATION Om jaNej > 4 OchOckså _antalApartments > 0 Då Konsol . WriteLine ( "Grattis, du blev godkänd." ) _state = State . APARTMENT_RENTED RentApartment () Else Console . WriteLine ( "Tyvärr, du blev inte godkänd." ) _state = State . VÄNTA Slut Om Avsluta Välj Falltillstånd . _ APARTMENT_RENTED Konsol . WriteLine ( "Vänta, vi hyr en lägenhet till dig." ) Avsluta Välj Avsluta Välj Avsluta Sub Public Sub RentApartment () Välj Fall _state Fall State . FULLY_RENTED Konsol . WriteLine ( "Tyvärr, vi är helt uthyrda. " ) Avsluta Välj ärendestatus . VÄNTA Konsol . WriteLine ( "Du måste skicka in en ansökan. " ) Avsluta Välj ärendestatus . GOT_APPLICATION- konsol . WriteLine ( "Du måste ha din applikation kontrollerad. " ) Avsluta Välj ärendestatus . APARTMENT_RENTED Konsol . WriteLine ( "Hyr en lägenhet till dig...." ) _numberApartments -= 1 DispenseKeys () Avsluta Välj Avsluta Välj slut sub Public Sub Dispense Keys () Välj Case _state Case State . FULLY_RENTED Konsol . WriteLine ( "Tyvärr, vi är helt uthyrda. " ) Avsluta Välj ärendestatus . VÄNTA Konsol . WriteLine ( "Du måste skicka in en ansökan. " ) Avsluta Välj ärendestatus . GOT_APPLICATION- konsol . WriteLine ( "Du måste ha din applikation kontrollerad. " ) Avsluta Välj ärendestatus . APARTMENT_RENTED Konsol . WriteLine ( "Här är dina nycklar!" ) _state = State . VÄNTAR Avsluta Välj Avsluta Välj Slut Sub Slutklass _ klassprogram _ Shared Sub Main () Dim rentalMethods = New RentalMethods ( 9 ) uthyrningsmetoder . GetApplication () rentalMethods . CheckApplication () rentalMethods . RentApartment () hyraMetoder . Dispense Keys () Konsol . Läs () End Sub End Class End Namespace
Design mönster | |
---|---|
Main | |
Generativ | |
Strukturell | |
Beteende | |
Parallell programmering |
|
arkitektonisk |
|
Java EE-mallar | |
Andra mallar | |
Böcker | |
Personligheter |