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 ratingsZertifizierung für Softwarearchitekten: Ihr Weg zur iSAQB-CPSA-F-Prüfung Rating: 0 out of 5 stars0 ratingsAbofallen im Netz: Wie Sie teure Klicks vermeiden Rating: 0 out of 5 stars0 ratingsCloud Computing: Rechtliche Grundlagen Rating: 0 out of 5 stars0 ratingsNeo4j 2.0: Eine Graphdatenbank für alle Rating: 0 out of 5 stars0 ratingsSecurity im E-Commerce: Absicherung von Shopsystemen wie Magento, Shopware und OXID Rating: 0 out of 5 stars0 ratingsAgile Softwareentwicklung: Ein Leitfaden für Manager Rating: 0 out of 5 stars0 ratingsJavaScript für Java-Entwickler Rating: 0 out of 5 stars0 ratingsCSS3: Die Referenz für Webentwickler Rating: 0 out of 5 stars0 ratingsSQL-Abfragen optimieren: Was Entwickler über Performance wissen müssen Rating: 0 out of 5 stars0 ratingsJavaScript und TypeScript für C#-Entwickler Rating: 0 out of 5 stars0 ratingsIhr Recht bei Onlineauktionen. Juristische Tipps für eBay und Co. 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 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 Blogger: Juristische Tipps für Blogs, Podcasts und Co. Rating: 0 out of 5 stars0 ratingsSQL Server: Performanceprobleme analysieren und beheben Rating: 0 out of 5 stars0 ratingsZertifizierung für Softwarearchitekten: Ihr Weg zur iSAQB-CPSA-F-Prüfung Rating: 0 out of 5 stars0 ratings
Related ebooks
SharePoint Kompendium - Bd. 16 Rating: 0 out of 5 stars0 ratingsAgiliät und Continuous Delivery Rating: 0 out of 5 stars0 ratingsModerne Datenzugriffslösungen mit Entity Framework 6 Rating: 0 out of 5 stars0 ratingsSoftware entwickeln mit C#, WPF und dem MVVM-Konzept Rating: 0 out of 5 stars0 ratingsAutomatisiertes Testen: Testautomatisierung mit Geb und ScalaTest Rating: 0 out of 5 stars0 ratingsC# 8.0 – kurz & gut Rating: 0 out of 5 stars0 ratingsHTML5, JavaScript und jQuery: Der Crashkurs für Softwareentwickler Rating: 2 out of 5 stars2/5Java – die Neuerungen in Version 9 bis 12: Modularisierung, Syntax- und API-Erweiterungen 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 ratingsKompaktkurs C# 7 Rating: 0 out of 5 stars0 ratingsPowerShell: Grundlagen für .NET-Entwickler 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 ratingsJava EE Security Rating: 0 out of 5 stars0 ratingsSoftwareentwicklungsprozess: Von der ersten Idee bis zur Installation Rating: 0 out of 5 stars0 ratingsEinstieg in TypeScript: Grundlagen für Entwickler Rating: 0 out of 5 stars0 ratingsDocker und die Containerwelt: Einstieg und Expertentipps rund um Docker-Container Rating: 1 out of 5 stars1/5Groovy – kurz & gut Rating: 0 out of 5 stars0 ratingsEinstieg in Google Go Rating: 0 out of 5 stars0 ratingsAgiles Projektmanagement: Scrum für Einsteiger Rating: 0 out of 5 stars0 ratingsSprechen Sie Java?: Eine Einführung in das systematische Programmieren Rating: 4 out of 5 stars4/5Die Serverwelt von Node.js Rating: 0 out of 5 stars0 ratingsVim in der Praxis - blitzschnell Text editieren: Blitzschnell Text editieren Rating: 0 out of 5 stars0 ratingsSharePoint Kompendium - Bd. 13 Rating: 0 out of 5 stars0 ratingsCross-Plattform-Entwicklung mit HTML und JavaScript Rating: 0 out of 5 stars0 ratingsProgrammieren für Einsteiger: Teil 2 Rating: 0 out of 5 stars0 ratingsLDAP für Java-Entwickler: Einstieg und Integration (Neuauflage) Rating: 0 out of 5 stars0 ratingsIT Wissensmanagement: Theorie und Praxis Rating: 0 out of 5 stars0 ratings
Programming For You
Algorithmen: Grundlagen und Implementierung Rating: 0 out of 5 stars0 ratingsC++: Eine kompakte Einführung Rating: 0 out of 5 stars0 ratingsJavaScript kurz & gut Rating: 3 out of 5 stars3/5Programmieren von Kopf bis Fuß Rating: 4 out of 5 stars4/5Python kurz & gut: Für Python 3.x und 2.7 Rating: 3 out of 5 stars3/5Hacken mit Python und Kali-Linux: Entwicklung eigener Hackingtools mit Python unter Kali-Linux Rating: 0 out of 5 stars0 ratingsSQL von Kopf bis Fuß Rating: 4 out of 5 stars4/5Mikrocontroller in der Elektronik: Mikrocontroller programmieren und in der Praxis einsetzen Rating: 0 out of 5 stars0 ratingsGit kurz & gut Rating: 0 out of 5 stars0 ratingsProgrammieren für Einsteiger: Teil 1 Rating: 0 out of 5 stars0 ratingsProgrammieren lernen mit Python 3: Schnelleinstieg für Beginner 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 ratingsProgrammieren für Einsteiger: Teil 2 Rating: 0 out of 5 stars0 ratingsArduino: Ein schneller Einstieg in die Microcontroller-Entwicklung Rating: 5 out of 5 stars5/5Das große Python3 Workbook: Mit vielen Beispielen und Übungen - Programmieren leicht gemacht! Rating: 4 out of 5 stars4/5Weniger schlecht programmieren Rating: 4 out of 5 stars4/5Linux Grundlagen - Ein Einstieg in das Linux-Betriebssystem Rating: 0 out of 5 stars0 ratingsEigene Spiele programmieren – Python lernen: Der spielerische Weg zur Programmiersprache Rating: 0 out of 5 stars0 ratingsMicrosoft Word 2016 (Microsoft Press): Einfache Anleitungen für wichtige Aufgaben 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 ratingsPowerShell: Anwendung und effektive Nutzung Rating: 5 out of 5 stars5/5Einstieg in TypeScript: Grundlagen für Entwickler Rating: 0 out of 5 stars0 ratingsAndroid-Programmierung kurz & gut Rating: 0 out of 5 stars0 ratingsRaspberry 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 ratingsDas Franzis Starterpaket Arduino Mega 2560: Das Handbuch für den Schnelleinstieg 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 Franzis Starterpaket Arduino Uno: Das Handbuch für den Schnelleinstieg Rating: 0 out of 5 stars0 ratingsC von Kopf bis Fuß Rating: 3 out of 5 stars3/5
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