{"id":2121,"date":"2019-08-04T02:02:04","date_gmt":"2019-08-03T23:02:04","guid":{"rendered":"http:\/\/demensdeum.com\/blog\/?p=2121"},"modified":"2024-12-16T22:32:35","modified_gmt":"2024-12-16T19:32:35","slug":"proxy-pattern","status":"publish","type":"post","link":"https:\/\/demensdeum.com\/blog\/de\/2019\/08\/04\/proxy-pattern\/","title":{"rendered":"Proxy-Muster"},"content":{"rendered":"<p>Das Proxy-Muster bezieht sich auf strukturelle Entwurfsmuster.<br \/>Das Muster beschreibt die Technik der Arbeit mit einer Klasse \u00fcber eine Klassenebene &#8211; Proxy. Ein Proxy erm\u00f6glicht es Ihnen, die Funktionalit\u00e4t der urspr\u00fcnglichen Klasse zu \u00e4ndern und dabei das urspr\u00fcngliche Verhalten beizubehalten und gleichzeitig die urspr\u00fcngliche Klassenschnittstelle beizubehalten.<br \/>Stellen wir uns die Situation vor &#8211; Im Jahr 2015 beschlie\u00dft eines der L\u00e4nder Westeuropas, alle Anfragen an die Websites der Benutzer des Landes aufzuzeichnen, um Statistiken und ein tieferes Verst\u00e4ndnis der politischen Gef\u00fchle der B\u00fcrger zu verbessern.<br \/>Stellen wir uns den Pseudocode einer naiven Implementierung des Gateways vor, \u00fcber das B\u00fcrger auf das Internet zugreifen:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-unknown\" data-lang=\"unknown\"><code>class InternetRouter {\n\n    private let internet: Internet\n\n    init(internet: Internet) {\n        self.internet = internet\n    }\n\n    func handle(request: Request, from client: Client) -> Data {\n        return self.internet.handle(request)\n    }\n\n}\n<\/code><\/pre>\n<\/div>\n<p>Im obigen Code erstellen wir eine Internet-Router-Klasse mit einem Zeiger auf ein Objekt, das den Internetzugang bereitstellt. Wenn ein Kunde eine Website-Anfrage stellt, geben wir eine Antwort aus dem Internet zur\u00fcck.<\/p>\n<p>Mithilfe des Proxy-Musters und des Singleton-Antimusters f\u00fcgen wir Funktionen zum Protokollieren des Clientnamens und der URL hinzu:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-unknown\" data-lang=\"unknown\"><code>class InternetRouterProxy {\n\n    private let internetRouter: InternetRouter\n\n    init(internet: Internet) {\n        self.internetRouter = InternetRouter(internet: internet)\n    }\n\n    func handle(request: Request, from client: Client) -> Data {\n\n        Logger.shared.log(\u201cClient name: \\(client.name), requested URL: \\(request.URL)\u201d)\n\n        return self.internetRouter.handle(request: request, from: client)\n    }\n\n}\n<\/code><\/pre>\n<\/div>\n<p>Aufgrund der Beibehaltung der urspr\u00fcnglichen InternetRouter-Schnittstelle in der Proxy-Klasse InternetRouterProxy reicht es aus, die Initialisierungsklasse von InternerRouter durch ihren Proxy zu ersetzen, es sind keine weiteren \u00c4nderungen an der Codebasis erforderlich.<\/p>\n<h3>Quellen<\/h3>\n<p><a href=\"https:\/\/refactoring.guru\/ru\/design-patterns\/proxy\" rel=\"noopener noreferrer\" target=\"_blank\">https:\/\/refactoring.guru\/ru\/design-patterns\/ Proxy<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das Proxy-Muster bezieht sich auf strukturelle Entwurfsmuster.Das Muster beschreibt die Technik der Arbeit mit einer Klasse \u00fcber eine Klassenebene &#8211; Proxy. Ein Proxy erm\u00f6glicht es Ihnen, die Funktionalit\u00e4t der urspr\u00fcnglichen Klasse zu \u00e4ndern und dabei das urspr\u00fcngliche Verhalten beizubehalten und gleichzeitig die urspr\u00fcngliche Klassenschnittstelle beizubehalten.Stellen wir uns die Situation vor &#8211; Im Jahr 2015 beschlie\u00dft<a class=\"more-link\" href=\"https:\/\/demensdeum.com\/blog\/de\/2019\/08\/04\/proxy-pattern\/\">Continue reading <span class=\"screen-reader-text\">&#8220;Proxy-Muster&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[61,52],"tags":[95,111],"class_list":["post-2121","post","type-post","status-publish","format-standard","hentry","category-techie","category-tutorials","tag-patterns","tag-proxy","entry"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"de","enabled_languages":["en","ru","zh","de","fr","ja","pt","hi"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"ru":{"title":true,"content":true,"excerpt":false},"zh":{"title":true,"content":true,"excerpt":false},"de":{"title":true,"content":true,"excerpt":false},"fr":{"title":true,"content":true,"excerpt":false},"ja":{"title":true,"content":true,"excerpt":false},"pt":{"title":true,"content":true,"excerpt":false},"hi":{"title":false,"content":false,"excerpt":false}}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/2121","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/comments?post=2121"}],"version-history":[{"count":13,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/2121\/revisions"}],"predecessor-version":[{"id":3949,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/2121\/revisions\/3949"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/media?parent=2121"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/categories?post=2121"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/tags?post=2121"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}