Változatlan interfész
Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2021. március 22-én felülvizsgált
verziótól ; az ellenőrzések 4 szerkesztést igényelnek .
Az objektumorientált programozásban a " változhatatlan interfész " egy minta egy megváltoztathatatlan objektum tervezésére . [1] [2] [3]
Egy megváltoztathatatlan interfész típusdefiníciót tartalmaz, amely nem tesz közzé olyan metódusokat , amelyek állapotot módosíthatnak. Az ilyen típusú objektumok megváltoztathatatlannak tűnnek.
Példa
Java
Tekintsük a java osztályt , amely egy 2D pont.
public class Pont2D {
private int x ;
magán int y ;
public Point2D ( int x , int y ) { this . x = x ; ezt . y = y_ _ }
public int getX () { return this . x ; }
public int getY () { return this . y ; }
public void setX ( int newX ) { this . x = újX ; }
public void setY ( int newY ) { this . y = új Y ; }
}
A Point2D osztály változtatható: létrehozása után az állapota módosítható valamelyik setter metódus ( setX()vagy setY()) meghívásával.
A Point2D megváltoztathatatlan interfésze a következőképpen definiálható:
nyilvános interfész ImmutablePoint2D {
public int getX ();
public int getY ();
}
Azáltal, hogy a Point2D-t az ImmutablePoint2D megvalósításává teszi, az ügyfélkód mostantól olyan típust használhat, amely nem rendelkezik mutációs metódusokkal, és így megváltoztathatatlan marad. Ezt a következő példa szemlélteti:
ImmutablePoint2D pont = new Point2D ( 0 , 0 ); // egy adott Point2D-példányra az
int x = pont változtathatatlan interfész hivatkozik . getX (); // érvényes
pont metódus hívása . setX ( 42 ); // fordítási hiba: a setX() metódus nem létezik az ImmutablePoint2D típuson
Csak egy megváltoztathatatlan interfész esetén nem lehet olyan metódust meghívni, amely megváltoztatja egy adott objektum állapotát.
Előnyök
- Egyértelműen kifejezi a típusváltozatlanság szándékát.
- A megváltoztathatatlan burkolómintát megvalósító típusokkal ellentétben nem kell felülbírálnia a mutáló metódusokat no exploit utasítás használatával vagy futásidejű kivételt dobni a mutációs metódus meghívásakor.
Hátrányok
- Lehetőség van arra, hogy a változtathatatlan interfész által hivatkozott példányok egy adott változtatható típusra öntsék át, majd módosítsák az állapotot. Például:
public void mutate ( ImmutablePoint2D point ) {
(( Point2D ) point ). setX ( 42 ); // érvényes hívás, mert
// a pont argumentum a Point2D-be lett leadva
}
- A konkrét osztályoknak kifejezetten deklarálniuk kell egy megváltoztathatatlan interfészt a megvalósításukban. Előfordulhat, hogy ez nem lehetséges, ha az adott osztály harmadik fél kódja "tulajdonosa", például ha egy könyvtárban található.
- Az objektum nem igazán megváltoztathatatlan, ezért nem alkalmas olyan adatstruktúrákban való használatra , amelyek megváltoztathatatlanságot igényelnek, mint például a hash térképek. Az objektum pedig a "változtatható oldalon" egyszerre változtatható.
- Előfordulhat, hogy a módosíthatatlan objektumokhoz rendelkezésre álló fordítói optimalizálások egy része nem érhető el változtatható objektumokhoz.
Alternatívák
A megváltoztathatatlan interfész alternatívája a változtathatatlan burkolóminta .
Linkek
- ↑ Változatlan interfész . Letöltve: 2016. május 10. Az eredetiből archiválva : 2010. szeptember 27.. (határozatlan)
- ↑ megváltoztathatatlan: Java szószedet . Letöltve: 2016. május 10. Az eredetiből archiválva : 2016. április 10. (határozatlan)
- ↑ Gyakorlati Java Praxis 65: Használjon öröklődést vagy delegálást a megváltoztathatatlan osztályok meghatározásához | Gyakorlati Java Praxis 65: Öröklődés vagy delegálás használata megváltoztathatatlan osztályok meghatározásához | Inf… . Letöltve: 2016. május 10. Az eredetiből archiválva : 2016. június 3. (határozatlan)