Extrahera en privat dataklass | |
---|---|
Beskrivs i Design Patterns | Inte |
Att markera en privat dataklass (eng. Private class data ) är ett strukturellt designmönster som används för att dölja attribut och manipulera dem.
Vanligtvis ser klasser alltid till en början tydliga och begripliga ut. De gör sitt jobb och klättrar inte in i andra klassers ansvar. Men när man utvecklar ett program läggs ny logik till. Som ett resultat får vissa klasser av misstag en hel del ytterligare ansvarsområden. En privat refactoring- metod kommer till undsättning , känd som "Extract Class". Det låter dig följa " Single Responsibility Principle ", vilket gör klasserna mer pålitliga och motståndskraftiga mot förändringar.
För att tillämpa detta designmönster på önskad klass måste du:
Du bör göra ändringar lite i taget och testa resultatet efter varje drag, detta kommer att spara dig från att behöva fixa ett stort antal fel i slutet. I slutet, efter att ha granskat de nya klasserna igen, gå tillbaka till den gamla klassen, kanske har dess ansvar förändrats, och nu är det vettigt att kalla det annorlunda.
Implementeringsexempel i C# namnområde Private_class_data { class Program { static void Main ( sträng [] args ) { var radius = new double (); var färg = ny färg (); var ursprung = newPoint ( ); var circle_before = nytt före . Cirkel ( radie , färg , ursprung ); var circle_after = ny efter . Cirkel ( radie , färg , ursprung ); } } klassfärg { } _ klass grafik { } klasspunkt { } _ } namnområde Private_class_data.before { class Circle { privat dubbel radie ; privat Färg färg ; privat punkt ursprung ; public Circle ( dubbel radie , Färg färg , Punkt ursprung ) { detta . radie = radie ; detta . färg = färg ; detta . ursprung = ursprung ; } public double Circumference { get { return 2 * Math . PI * detta . radie ; } } public double Diameter { get { return 2 * this . radie ; } } public void Draw ( Grafikgrafik ) { /// ... } } } namnområde Private_class_data.after { class CircleData { privat dubbel radie ; privat Färg färg ; privat punkt ursprung ; public CircleData ( dubbel radie , färgfärg , punktursprung ) { detta . _ _ radie = radie ; detta . färg = färg ; detta . ursprung = ursprung ; } public double Radius { get { return this . radie ; } } public Color Color { get { returnera detta . färg ; } } public Point Origin { get { returnera detta . ursprung ; } } } class Circle { privat CircleData circleData ; public Circle ( dubbel radie , färgfärg , punktursprung ) { circleData = new CircleData ( radie , färg , ursprung ) ; _ } public double Circumference { get { return 2 * Math . PI * detta . cirkelData . Radie ; } } public double Diameter { get { return 2 * this . cirkelData . Radie ; } } public void Draw ( Grafikgrafik ) { /// ... } } }Design mönster | |
---|---|
Main | |
Generativ | |
Strukturell | |
Beteende | |
Parallell programmering |
|
arkitektonisk |
|
Java EE-mallar | |
Andra mallar | |
Böcker | |
Personligheter |