Dynamic Proxies: Effizient programmieren
Von Dr. Heinz Kabutz und Sven Ruppert
()
Über dieses E-Book
Ähnlich wie Dynamic Proxies
Titel in dieser Serie (20)
Neo4j 2.0: Eine Graphdatenbank für alle Bewertung: 0 von 5 Sternen0 BewertungenJavaScript für Java-Entwickler Bewertung: 0 von 5 Sternen0 BewertungenAbofallen im Netz: Wie Sie teure Klicks vermeiden Bewertung: 0 von 5 Sternen0 BewertungenZertifizierung für Softwarearchitekten: Ihr Weg zur iSAQB-CPSA-F-Prüfung Bewertung: 0 von 5 Sternen0 BewertungenCloud Computing: Rechtliche Grundlagen Bewertung: 0 von 5 Sternen0 BewertungenAgile Softwareentwicklung: Ein Leitfaden für Manager Bewertung: 0 von 5 Sternen0 BewertungenCSS3: Die Referenz für Webentwickler Bewertung: 0 von 5 Sternen0 BewertungenJavaScript und TypeScript für C#-Entwickler Bewertung: 0 von 5 Sternen0 BewertungenSecurity im E-Commerce: Absicherung von Shopsystemen wie Magento, Shopware und OXID Bewertung: 0 von 5 Sternen0 BewertungenSQL-Abfragen optimieren: Was Entwickler über Performance wissen müssen Bewertung: 0 von 5 Sternen0 BewertungenDynamic Proxies: Effizient programmieren Bewertung: 0 von 5 Sternen0 BewertungenIhr Recht bei Onlineauktionen. Juristische Tipps für eBay und Co. Bewertung: 0 von 5 Sternen0 BewertungenVorsicht Suchmaschine: Rechtliche Tipps für Google und Co. Bewertung: 0 von 5 Sternen0 BewertungenJavaScript für Java-Entwickler Bewertung: 0 von 5 Sternen0 BewertungenJavaScript für Java-Entwickler Bewertung: 0 von 5 Sternen0 BewertungenSQL Server: Performanceprobleme analysieren und beheben Bewertung: 0 von 5 Sternen0 BewertungenZertifizierung für Softwarearchitekten: Ihr Weg zur iSAQB-CPSA-F-Prüfung Bewertung: 0 von 5 Sternen0 BewertungenCrime Scene Internet: Ein Streifzug durch das Computer- und Internetstrafrecht Bewertung: 0 von 5 Sternen0 BewertungenIhr Recht als Blogger: Juristische Tipps für Blogs, Podcasts und Co. Bewertung: 0 von 5 Sternen0 BewertungenIhr Recht als Programmierer: Juristische Tipps für Angestellte, Selbstständige und Freelancer Bewertung: 0 von 5 Sternen0 Bewertungen
Ähnliche E-Books
SharePoint Kompendium - Bd. 16 Bewertung: 0 von 5 Sternen0 BewertungenAutomatisiertes Testen: Testautomatisierung mit Geb und ScalaTest Bewertung: 0 von 5 Sternen0 BewertungenModerne Datenzugriffslösungen mit Entity Framework 6 Bewertung: 0 von 5 Sternen0 BewertungenAgiliät und Continuous Delivery Bewertung: 0 von 5 Sternen0 BewertungenSoftware entwickeln mit C#, WPF und dem MVVM-Konzept Bewertung: 0 von 5 Sternen0 BewertungenSoftwareentwicklungsprozess: Von der ersten Idee bis zur Installation Bewertung: 0 von 5 Sternen0 BewertungenSprechen Sie Java?: Eine Einführung in das systematische Programmieren Bewertung: 4 von 5 Sternen4/5PowerShell: Grundlagen für .NET-Entwickler Bewertung: 0 von 5 Sternen0 BewertungenKompaktkurs C# 7 Bewertung: 0 von 5 Sternen0 BewertungenBigData mit JavaScript visualisieren: D3.js für die Darstellung großer Datenmengen einsetzen Bewertung: 0 von 5 Sternen0 BewertungenJavaScript und Ajax: Das Praxisbuch für Web-Entwickler Bewertung: 0 von 5 Sternen0 BewertungenC# 6.0 – kurz & gut Bewertung: 5 von 5 Sternen5/5Microservices: Der Hype im Realitätscheck Bewertung: 0 von 5 Sternen0 BewertungenJava EE Security Bewertung: 0 von 5 Sternen0 BewertungenGroovy – kurz & gut Bewertung: 0 von 5 Sternen0 BewertungenAuswirkungen der Digitalisierung und neuer Technologien auf das Geschäftsmodell der Versicherungsbranche: Risiken und Chancen Bewertung: 0 von 5 Sternen0 BewertungenProgrammieren lernen mit Computerspielen: In Visual Basic 5.0 / 6.0 Bewertung: 0 von 5 Sternen0 BewertungenDas Excel SOS-Handbuch: Wie sie Excel (2010-2019 & 365) schnell & einfach meistern. Die All-in-One Anleitung für ihren privaten & beruflichen Excel-Erfolg! Bewertung: 0 von 5 Sternen0 Bewertungen23 Wege um eine (agile) Transformation an die Wand zu fahren: Der ultimative Leitfaden zur Eliminierung von Selbstorganisation und Mitarbeitermotivation Bewertung: 0 von 5 Sternen0 BewertungenSo findest du den Einstieg in WordPress: Die technischen Grundlagen zu Installation, Konfiguration, Optimierung, Sicherheit, SEO Bewertung: 0 von 5 Sternen0 BewertungenSharePoint Kompendium - Bd. 13 Bewertung: 0 von 5 Sternen0 BewertungenIT Wissensmanagement: Theorie und Praxis Bewertung: 0 von 5 Sternen0 BewertungenPräsentieren und moderieren für die Projektleitung Bewertung: 0 von 5 Sternen0 BewertungenCross-Plattform-Entwicklung mit HTML und JavaScript Bewertung: 0 von 5 Sternen0 BewertungenVon der Fachperson zur Führungsperson: Eine Einführung und Starthilfe für neue oder zukünftige Führungspersonen Bewertung: 0 von 5 Sternen0 BewertungenDynamische Webseiten: Einstieg in HTML, PHP und MySQL Bewertung: 0 von 5 Sternen0 BewertungenErklärvideos einfach erfolgreich Bewertung: 0 von 5 Sternen0 Bewertungen
Programmieren für Sie
.NET-Praxis: Tipps und Tricks zu .NET und Visual Studio Bewertung: 0 von 5 Sternen0 BewertungenLinux Grundlagen - Ein Einstieg in das Linux-Betriebssystem Bewertung: 0 von 5 Sternen0 BewertungenAlgorithmen: Grundlagen und Implementierung Bewertung: 0 von 5 Sternen0 BewertungenJavaScript kurz & gut Bewertung: 3 von 5 Sternen3/5Programmieren lernen mit Python 3: Schnelleinstieg für Beginner Bewertung: 0 von 5 Sternen0 BewertungenWeniger schlecht programmieren Bewertung: 4 von 5 Sternen4/5Linux Befehlsreferenz: Schnelleinstieg in die Arbeit mit der Konsole, regulären Ausdrücken und Shellscripting Bewertung: 0 von 5 Sternen0 BewertungenMikrocontroller in der Elektronik: Mikrocontroller programmieren und in der Praxis einsetzen Bewertung: 0 von 5 Sternen0 BewertungenPython kurz & gut: Für Python 3.x und 2.7 Bewertung: 3 von 5 Sternen3/5Git kurz & gut Bewertung: 0 von 5 Sternen0 BewertungenSQL von Kopf bis Fuß Bewertung: 4 von 5 Sternen4/5Programmieren von Kopf bis Fuß Bewertung: 4 von 5 Sternen4/5C von Kopf bis Fuß Bewertung: 3 von 5 Sternen3/5Raspberry Pi: Mach's einfach: Die kompakteste Gebrauchsanweisung mit 222 Anleitungen. Geeignet für Raspberry Pi 3 Modell B / B+ Bewertung: 0 von 5 Sternen0 BewertungenHacken mit Python und Kali-Linux: Entwicklung eigener Hackingtools mit Python unter Kali-Linux Bewertung: 0 von 5 Sternen0 BewertungenDie ultimative FRITZ!Box Bibel - Das Praxisbuch 2. aktualisierte Auflage - mit vielen Insider Tipps und Tricks - komplett in Farbe Bewertung: 0 von 5 Sternen0 BewertungenDas Excel SOS-Handbuch: Wie sie Excel (2010-2019 & 365) schnell & einfach meistern. Die All-in-One Anleitung für ihren privaten & beruflichen Excel-Erfolg! Bewertung: 0 von 5 Sternen0 BewertungenDas große Python3 Workbook: Mit vielen Beispielen und Übungen - Programmieren leicht gemacht! Bewertung: 4 von 5 Sternen4/5Eigene Spiele programmieren – Python lernen: Der spielerische Weg zur Programmiersprache Bewertung: 0 von 5 Sternen0 BewertungenAndroid-Programmierung kurz & gut Bewertung: 0 von 5 Sternen0 BewertungenNew Game Plus: Perspektiven der Game Studies. Genres - Künste - Diskurse (Bild und Bit. Studien zur digitalen Medienkultur) Bewertung: 0 von 5 Sternen0 BewertungenSoftwareentwicklungsprozess: Von der ersten Idee bis zur Installation Bewertung: 0 von 5 Sternen0 BewertungenPython | Schritt für Schritt Programmieren lernen: Der ultimative Anfänger Guide für einen einfachen & schnellen Einstieg Bewertung: 0 von 5 Sternen0 BewertungenRaspberry Pi: Einstieg • Optimierung • Projekte Bewertung: 5 von 5 Sternen5/5Perspektiven für Informatiker 2019: Branchenüberblick, Erfahrungsberichte und Tipps zum Berufseinstieg Bewertung: 0 von 5 Sternen0 BewertungenHTML5-Programmierung von Kopf bis Fuß: Webanwendungen mit HTML5 und JavaScript Bewertung: 0 von 5 Sternen0 BewertungenMicrocontroller für das IoT Bewertung: 0 von 5 Sternen0 BewertungenProgrammieren für Einsteiger: Teil 1 Bewertung: 0 von 5 Sternen0 BewertungenPython lernen – kurz & gut Bewertung: 0 von 5 Sternen0 BewertungenDas Franzis Starterpaket Arduino Uno: Das Handbuch für den Schnelleinstieg Bewertung: 0 von 5 Sternen0 Bewertungen
Rezensionen für Dynamic Proxies
0 Bewertungen0 Rezensionen
Buchvorschau
Dynamic Proxies - Dr. Heinz Kabutz
Ruppert
1 Einführung
1.1 Vergleich von Proxy und Decorator
Was ist eigentlich der Unterschied zwischen einem Proxy und einem Decorator? Diese Frage sollte man sich stellen, sobald man sich mit delegierenden Patterns auseinandersetzt. Nehmen wir das Buch der GoF als Grundlage, so ist ein Proxy direkt assoziiert mit dem Element, auf das der Proxy weiterleitet. Die Darstellung in Java zeigt Listing 1.1.
interface Subject {
public void request();
}
class RealSubject implements Subject {
public void request() { /* do something */ }
}
class Proxy implements Subject {
private Subject realSubject;
Proxy(Subject realSubject) {
this.realSubject = realSubject;
}
public void request() {
/* do something, then */
realSubject.request();
}
}
Listing 1.1: Proxy in Java
Gut zu erkennen ist die Assoziation an dem Attribut realSubject und der Delegation des Methodenaufrufs in der Methode request() der Klasse Proxy. Der Decorator hingegen reicht zum einen per Delegation die Methodenaufrufe weiter, und zum anderen erweitert er auch die Schnittstelle um individuelle Eigenschaften. Der Decorator hat auf jeden Fall dieselbe Schnittstelle wie das zu dekorierende Element (Listing 1.2).
interface Component {
public void operation();
}
class ConcreteComponent implements Component {
public void operation() {/* do something */}
}
class Decorator implements Subject {
private Component component;
Decorator(Component component) {
this.component = component;
}
public void operation() {
/* do something, then */
component.operation();
}
}
class ConcreteDecorator extends Decorator {
ConcreteDecorator(Component component) {
super(component);
}
public void anotherOperation() {
/* decorate the other operation in
some way, then call the
other operation() */
operation();
}
}
Listing 1.2: Decorator in Java
Wenn man nun die beiden Beispiele ein wenig genauer betrachtet, fällt auf, dass es kaum Unterschiede zwischen der Implementierung eines Proxys und einem Decorator gibt. Um das noch ein wenig genauer hervorzuheben, wurde auf sprechende Namen verzichtet und es wurden stattdessen einfache Buchstaben verwendet (Listing 1.3).
//Proxy
interface A {
public void f();
}
class B implements A {
public void f() { /* do something */ }
}
class C implements A {
private A a;
C(A a) { this.a = a; }
public void f() {
/* do something, then */
a.f();
}
}
//Decorator
interface A {
public void f();
}
class B implements A{
public void f() { /* do something */ }
}
class C implements A {
private A a;
C(A a) { this.a = a; }
public void f() {
/* do something, then */
a.f();
}
}
class D extends C {
D(A a) { super(a); }
public void g() {
/* decorate the other operation
in some way, then call the
other operation() */
f();
}
}
Listing 1.3: Proxy und Decorator in Java
Bei der Definition der Pattern Proxy und Decorator ist jedoch auch die Intention zu beachten. Ein Proxy ist ein Surrogat oder Platzhalter für ein anderes Objekt, um den Zugriff zu kontrollieren. Ein Decorator hingegen fügt einem Objekt dynamisch weitere Verantwortungen/Fähigkeiten hinzu. Ein Decorator ist somit eine flexible Alternative zu der Vererbung, um die Funktionalität zu erweitern.
Zusammenfassend kann man es wie folgt definieren: Um zu erkennen, welches Pattern verwendet worden ist, muss nicht nur die Klassenstruktur, sondern es müssen auch die Verwendung und die Intention im Einzelfall beachtet werden. In der Fallunterscheidung, ob es sich um einen Proxy oder Decorator handelt, muss also das gewünschte Ziel betrachtet werden.
Es gibt noch einen sehr wichtigen Unterschied zwischen den Strukturen Decorator und Proxy. Derjenige, der diese Struktur verwendet, verwendet bei einem Proxy meist das allgemeinste Interface in der Vererbungskette. Bei einem Decorator ist es dagegen immer die spezialisierteste Version. Als Beispiel für einen Decorator sehen wir uns die Klasse ObjectInputStream an. Hier wird ein Client immer direkt auf der Klasse ObjectInputStream arbeiten und nicht auf InputStream selbst. Bei einem Proxy auf eine ArrayList wird man auf dem Interface List arbeiten.
1.2 Proxy-Gruppen
Lazy Initialization with Virtual Proxy
Wir werden uns nun ansehen, wie die Erzeugung einer Objektinstanz so lange hinausgezögert werden kann, bis der erste Methodenaufruf erfolgt. Für den Entwickler soll es aber so aussehen, als ob er schon die Objektinstanz erhalten hat. Gehen wir im Folgenden davon aus, dass wir ein Interface mit dem Namen