Dynamic Proxies: Effizient programmieren
By Dr. Heinz Kabutz and Sven Ruppert
()
About this ebook
Related to Dynamic Proxies
Titles in the series (20)
Abofallen im Netz: Wie Sie teure Klicks vermeiden Rating: 0 out of 5 stars0 ratingsJavaScript 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 ratingsSQL-Abfragen optimieren: Was Entwickler über Performance wissen müssen Rating: 0 out of 5 stars0 ratingsCSS3: Die Referenz für Webentwickler Rating: 0 out of 5 stars0 ratingsNeo4j 2.0: Eine Graphdatenbank für alle Rating: 0 out of 5 stars0 ratingsAgile Softwareentwicklung: Ein Leitfaden für Manager Rating: 0 out of 5 stars0 ratingsSecurity im E-Commerce: Absicherung von Shopsystemen wie Magento, Shopware und OXID 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 ratingsIhr Recht bei Onlineauktionen. Juristische Tipps für eBay 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 ratingsVorsicht Suchmaschine: Rechtliche Tipps für Google und Co. Rating: 0 out of 5 stars0 ratingsDynamic Proxies: Effizient programmieren Rating: 0 out of 5 stars0 ratingsZertifizierung für Softwarearchitekten: Ihr Weg zur iSAQB-CPSA-F-Prüfung Rating: 0 out of 5 stars0 ratingsJavaScript für Java-Entwickler Rating: 0 out of 5 stars0 ratingsCrime Scene Internet: Ein Streifzug durch das Computer- und Internetstrafrecht 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 ratingsSQL Server: Performanceprobleme analysieren und beheben Rating: 0 out of 5 stars0 ratings
Related ebooks
Semantic Web: schnell + kompakt 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 ratingsAutomatisiertes Testen: Testautomatisierung mit Geb und ScalaTest Rating: 0 out of 5 stars0 ratingsSharePoint Kompendium - Bd. 16 Rating: 0 out of 5 stars0 ratingsSharePoint Kompendium - Bd. 13 Rating: 0 out of 5 stars0 ratingsAgiliät und Continuous Delivery Rating: 0 out of 5 stars0 ratingsDynamische Webseiten: Einstieg in HTML, PHP und MySQL Rating: 0 out of 5 stars0 ratingsWeb-Applikationen entwickeln mit NoSQL: Das Buch für Datenbank-Einsteiger und Profis! Rating: 0 out of 5 stars0 ratingsModerne Datenzugriffslösungen mit Entity Framework 6 Rating: 0 out of 5 stars0 ratingsPowerShell: Grundlagen für .NET-Entwickler Rating: 0 out of 5 stars0 ratingsJava EE Security Rating: 0 out of 5 stars0 ratingsCross-Plattform-Entwicklung mit HTML und JavaScript Rating: 0 out of 5 stars0 ratingsSoftware entwickeln mit C#, WPF und dem MVVM-Konzept Rating: 0 out of 5 stars0 ratingsJavaScript und Ajax: Das Praxisbuch für Web-Entwickler Rating: 0 out of 5 stars0 ratingsEinführung in die Programmierung mit Java: Begleitunterlagen zu dem Onlinekurs Rating: 0 out of 5 stars0 ratingsEinstieg in TypeScript: Grundlagen für Entwickler Rating: 0 out of 5 stars0 ratingsProgressive Web-Apps: Offlinefähige Web-Anwendungen mit nativen Qualitäten Rating: 0 out of 5 stars0 ratingsProgrammieren lernen mit Computerspielen: In Visual Basic 5.0 / 6.0 Rating: 0 out of 5 stars0 ratingsZettelWirtschaft: Die Geburt der Kartei aus dem Geiste der Bibliothek Rating: 0 out of 5 stars0 ratingsJavaScript effektiv: 68 Dinge, die ein guter JavaScript-Entwickler wissen sollte Rating: 0 out of 5 stars0 ratingsSagen Sie es einfach: Eine Einführung in die einfache Sprache Rating: 0 out of 5 stars0 ratingsAgiles Arbeiten: Das Wesentliche kurz erklärt. Version 3.0 Rating: 0 out of 5 stars0 ratingsVerteilte Systeme mit Kubernetes entwerfen: Patterns und Prinzipien für skalierbare und zuverlässige Services Rating: 0 out of 5 stars0 ratingsPräsentieren und moderieren für die Projektleitung Rating: 0 out of 5 stars0 ratingsProgrammierung in Visual Basic (VB): von der promanalyse zum programm Rating: 0 out of 5 stars0 ratingsProjektmanagement kurz & gut Rating: 0 out of 5 stars0 ratingsAphorismen zur Lebensweisheit Rating: 0 out of 5 stars0 ratings
Programming For You
SQL – kurz & gut Rating: 0 out of 5 stars0 ratingsMicrosoft Word 2016 (Microsoft Press): Einfache Anleitungen für wichtige Aufgaben 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 ratingsPython kurz & gut: Für Python 3.x und 2.7 Rating: 3 out of 5 stars3/5Python-Grundlagen 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 ratingsPowerShell: Anwendung und effektive Nutzung Rating: 5 out of 5 stars5/5Mikrocontroller in der Elektronik: Mikrocontroller programmieren und in der Praxis einsetzen Rating: 0 out of 5 stars0 ratingsDie ultimative QNAP NAS Bibel - Das Praxisbuch - mit vielen Insider Tipps und Tricks - komplett in Farbe Rating: 0 out of 5 stars0 ratingsTraumjob IT 2021: Branchenüberblick, Erfahrungsberichte und Tipps zum Berufseinstieg Rating: 5 out of 5 stars5/5JavaScript kurz & gut Rating: 3 out of 5 stars3/5Linux Grundlagen - Ein Einstieg in das Linux-Betriebssystem Rating: 0 out of 5 stars0 ratingsC++: Eine kompakte Einführung Rating: 0 out of 5 stars0 ratingsPython programmieren lernen: Der spielerische Einstieg mit Minecraft Rating: 0 out of 5 stars0 ratingsArduino: Ein schneller Einstieg in die Microcontroller-Entwicklung Rating: 5 out of 5 stars5/5Raspberry Pi: Einstieg • Optimierung • Projekte Rating: 5 out of 5 stars5/5Think Python: Systematisch programmieren lernen mit Python Rating: 0 out of 5 stars0 ratingsAndroid-Programmierung kurz & gut Rating: 0 out of 5 stars0 ratingsProgrammieren lernen mit Python 3: Schnelleinstieg für Beginner Rating: 0 out of 5 stars0 ratingsGames | Game Design | Game Studies: Eine Einführung (Deutschsprachige Ausgabe) 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 ratingsDas große Python3 Workbook: Mit vielen Beispielen und Übungen - Programmieren leicht gemacht! Rating: 4 out of 5 stars4/5Perspektiven für Informatiker 2019: Branchenüberblick, Erfahrungsberichte und Tipps zum Berufseinstieg Rating: 0 out of 5 stars0 ratingsSQL von Kopf bis Fuß Rating: 4 out of 5 stars4/5React lernen und verstehen 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 ratingsEigene Spiele programmieren – Python lernen: Der spielerische Weg zur Programmiersprache 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 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