Dynamic Proxies: Effizient programmieren
By Dr. Heinz Kabutz and Sven Ruppert
()
About this ebook
Related to Dynamic Proxies
Titles in the series (20)
JavaScript für Java-Entwickler Rating: 0 out of 5 stars0 ratingsCSS3: Die Referenz für Webentwickler Rating: 0 out of 5 stars0 ratingsAbofallen im Netz: Wie Sie teure Klicks vermeiden Rating: 0 out of 5 stars0 ratingsZertifizierung für Softwarearchitekten: Ihr Weg zur iSAQB-CPSA-F-Prüfung Rating: 0 out of 5 stars0 ratingsIhr Recht bei Onlineauktionen. Juristische Tipps für eBay und Co. Rating: 0 out of 5 stars0 ratingsSQL-Abfragen optimieren: Was Entwickler über Performance wissen müssen Rating: 0 out of 5 stars0 ratingsAgile Softwareentwicklung: Ein Leitfaden für Manager Rating: 0 out of 5 stars0 ratingsNeo4j 2.0: Eine Graphdatenbank für alle Rating: 0 out of 5 stars0 ratingsCloud Computing: Rechtliche Grundlagen Rating: 0 out of 5 stars0 ratingsJavaScript und TypeScript für C#-Entwickler Rating: 0 out of 5 stars0 ratingsSecurity im E-Commerce: Absicherung von Shopsystemen wie Magento, Shopware und OXID Rating: 0 out of 5 stars0 ratingsIhr Recht als Blogger: Juristische Tipps für Blogs, Podcasts und Co. Rating: 0 out of 5 stars0 ratingsJavaScript für Java-Entwickler Rating: 0 out of 5 stars0 ratingsDynamic Proxies: Effizient programmieren Rating: 0 out of 5 stars0 ratingsVorsicht Suchmaschine: Rechtliche Tipps für Google und Co. Rating: 0 out of 5 stars0 ratingsJavaScript für Java-Entwickler Rating: 0 out of 5 stars0 ratingsIhr Recht als Programmierer: Juristische Tipps für Angestellte, Selbstständige und Freelancer Rating: 0 out of 5 stars0 ratingsCrime Scene Internet: Ein Streifzug durch das Computer- und Internetstrafrecht Rating: 0 out of 5 stars0 ratingsZertifizierung für Softwarearchitekten: Ihr Weg zur iSAQB-CPSA-F-Prüfung Rating: 0 out of 5 stars0 ratingsSQL Server: Performanceprobleme analysieren und beheben Rating: 0 out of 5 stars0 ratings
Related ebooks
SharePoint Kompendium - Bd. 16 Rating: 0 out of 5 stars0 ratingsAutomatisiertes Testen: Testautomatisierung mit Geb und ScalaTest Rating: 0 out of 5 stars0 ratingsModerne Datenzugriffslösungen mit Entity Framework 6 Rating: 0 out of 5 stars0 ratingsAgiliät und Continuous Delivery Rating: 0 out of 5 stars0 ratingsSoftware entwickeln mit C#, WPF und dem MVVM-Konzept Rating: 0 out of 5 stars0 ratingsSoftwareentwicklungsprozess: Von der ersten Idee bis zur Installation Rating: 0 out of 5 stars0 ratingsSprechen Sie Java?: Eine Einführung in das systematische Programmieren Rating: 4 out of 5 stars4/5PowerShell: Grundlagen für .NET-Entwickler Rating: 0 out of 5 stars0 ratingsKompaktkurs C# 7 Rating: 0 out of 5 stars0 ratingsBigData mit JavaScript visualisieren: D3.js für die Darstellung großer Datenmengen einsetzen Rating: 0 out of 5 stars0 ratingsJavaScript und Ajax: Das Praxisbuch für Web-Entwickler Rating: 0 out of 5 stars0 ratingsC# 6.0 – kurz & gut Rating: 5 out of 5 stars5/5Microservices: Der Hype im Realitätscheck Rating: 0 out of 5 stars0 ratingsJava EE Security Rating: 0 out of 5 stars0 ratingsGroovy – kurz & gut Rating: 0 out of 5 stars0 ratingsAuswirkungen der Digitalisierung und neuer Technologien auf das Geschäftsmodell der Versicherungsbranche: Risiken und Chancen Rating: 0 out of 5 stars0 ratingsProgrammieren lernen mit Computerspielen: In Visual Basic 5.0 / 6.0 Rating: 0 out of 5 stars0 ratingsSo findest du den Einstieg in WordPress: Die technischen Grundlagen zu Installation, Konfiguration, Optimierung, Sicherheit, SEO Rating: 0 out of 5 stars0 ratingsSharePoint Kompendium - Bd. 13 Rating: 0 out of 5 stars0 ratingsIT Wissensmanagement: Theorie und Praxis Rating: 0 out of 5 stars0 ratingsPräsentieren und moderieren für die Projektleitung Rating: 0 out of 5 stars0 ratingsCross-Plattform-Entwicklung mit HTML und JavaScript Rating: 0 out of 5 stars0 ratingsVon der Fachperson zur Führungsperson: Eine Einführung und Starthilfe für neue oder zukünftige Führungspersonen Rating: 0 out of 5 stars0 ratingsDynamische Webseiten: Einstieg in HTML, PHP und MySQL Rating: 0 out of 5 stars0 ratingsErklärvideos einfach erfolgreich Rating: 0 out of 5 stars0 ratings
Programming For You
Algorithmen: Grundlagen und Implementierung Rating: 0 out of 5 stars0 ratingsC von Kopf bis Fuß Rating: 3 out of 5 stars3/5JavaScript kurz & gut Rating: 3 out of 5 stars3/5Python kurz & gut: Für Python 3.x und 2.7 Rating: 3 out of 5 stars3/5Microcontroller für das IoT Rating: 0 out of 5 stars0 ratingsEigene Spiele programmieren – Python lernen: Der spielerische Weg zur Programmiersprache Rating: 0 out of 5 stars0 ratingsProgrammieren für Einsteiger: Teil 1 Rating: 0 out of 5 stars0 ratingsWeniger schlecht programmieren Rating: 4 out of 5 stars4/5Git kurz & gut Rating: 0 out of 5 stars0 ratingsRaspberry Pi: Einstieg • Optimierung • Projekte Rating: 5 out of 5 stars5/5SQL von Kopf bis Fuß Rating: 4 out of 5 stars4/5Raspberry Pi: Mach's einfach: Die kompakteste Gebrauchsanweisung mit 222 Anleitungen. Geeignet für Raspberry Pi 3 Modell B / B+ Rating: 0 out of 5 stars0 ratingsHacken mit Python und Kali-Linux: Entwicklung eigener Hackingtools mit Python unter Kali-Linux Rating: 0 out of 5 stars0 ratingsLinux Grundlagen - Ein Einstieg in das Linux-Betriebssystem Rating: 0 out of 5 stars0 ratingsMikrocontroller in der Elektronik: Mikrocontroller programmieren und in der Praxis einsetzen Rating: 0 out of 5 stars0 ratingsC++: Eine kompakte Einführung Rating: 0 out of 5 stars0 ratingsPython | Schritt für Schritt Programmieren lernen: Der ultimative Anfänger Guide für einen einfachen & schnellen Einstieg Rating: 0 out of 5 stars0 ratingsDas Franzis Starterpaket Arduino Uno: Das Handbuch für den Schnelleinstieg Rating: 0 out of 5 stars0 ratingsAndroid-Programmierung kurz & gut Rating: 0 out of 5 stars0 ratingsSoftwareentwicklungsprozess: Von der ersten Idee bis zur Installation Rating: 0 out of 5 stars0 ratingsProgrammieren von Kopf bis Fuß Rating: 4 out of 5 stars4/5PowerShell: Anwendung und effektive Nutzung Rating: 5 out of 5 stars5/5Einstieg in TypeScript: Grundlagen für Entwickler Rating: 0 out of 5 stars0 ratingsProgrammieren lernen mit Python 3: Schnelleinstieg für Beginner Rating: 0 out of 5 stars0 ratingsLinux Befehlsreferenz: Schnelleinstieg in die Arbeit mit der Konsole, regulären Ausdrücken und Shellscripting Rating: 0 out of 5 stars0 ratingsJava 8 - Die Neuerungen: Lambdas, Streams, Date and Time API und JavaFX 8 im Überblick Rating: 0 out of 5 stars0 ratingsDas große Python3 Workbook: Mit vielen Beispielen und Übungen - Programmieren leicht gemacht! Rating: 4 out of 5 stars4/5HTML5-Programmierung von Kopf bis Fuß: Webanwendungen mit HTML5 und JavaScript Rating: 0 out of 5 stars0 ratingsAndroid-Entwicklung für Einsteiger - 20.000 Zeilen unter dem Meer: 2. erweiterte Auflage Rating: 0 out of 5 stars0 ratingsPowerprojekte mit Arduino und C: Schluss mit dem frustrierenden Ausprobieren von Code-Schnipseln! Rating: 0 out of 5 stars0 ratings
Reviews for Dynamic Proxies
0 ratings0 reviews
Book preview
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