{"id":7835,"date":"2023-09-25T08:53:03","date_gmt":"2023-09-25T11:53:03","guid":{"rendered":"https:\/\/elemarjr.com\/clube-de-estudos\/?p=7835"},"modified":"2023-10-21T21:33:04","modified_gmt":"2023-10-22T00:33:04","slug":"padrao-proxy-explorando-suas-complexidades-e-potenciais","status":"publish","type":"artigos","link":"https:\/\/elemarjr.com\/clube-de-estudos\/artigos\/padrao-proxy-explorando-suas-complexidades-e-potenciais\/","title":{"rendered":"Padr\u00e3o &#8220;Proxy&#8221;: Explorando suas Complexidades e Potenciais"},"content":{"rendered":"\n<p>Para desenvolvedores s\u00eaniores, o conhecimento profundo dos padr\u00f5es de projeto \u00e9 essencial. Entre esses padr\u00f5es, o Padr\u00e3o Proxy, embora amplamente conhecido, muitas vezes \u00e9 subestimado em rela\u00e7\u00e3o \u00e0 sua complexidade e ao potencial que pode oferecer. Neste artigo, iremos mergulhar fundo no Padr\u00e3o Proxy, explorando suas nuances e revelando insights que transcendem o b\u00e1sico, ajudando a dominar essa ferramenta fundamental no desenvolvimento de software.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A Ess\u00eancia do Padr\u00e3o Proxy<\/h2>\n\n\n\n<p>Em seu n\u00facleo, o Padr\u00e3o Proxy \u00e9 um padr\u00e3o estrutural que atua como um intermedi\u00e1rio entre o cliente e um objeto real, controlando o acesso a esse objeto. Essa abstra\u00e7\u00e3o cria um novo n\u00edvel de indire\u00e7\u00e3o, proporcionando uma s\u00e9rie de benef\u00edcios em v\u00e1rias situa\u00e7\u00f5es. As principais utiliza\u00e7\u00f5es do Padr\u00e3o Proxy incluem:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Lazy Loading<\/h3>\n\n\n\n<p>Um dos usos mais comuns do Padr\u00e3o Proxy \u00e9 a implementa\u00e7\u00e3o de &#8220;Lazy Loading&#8221;. Isso significa que um objeto real \u00e9 carregado somente quando \u00e9 realmente necess\u00e1rio, economizando recursos valiosos, como mem\u00f3ria e tempo de inicializa\u00e7\u00e3o.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Proxy Virtual<\/h3>\n\n\n\n<p>Os Proxies Virtuais permitem a cria\u00e7\u00e3o de objetos complexos sob demanda. Eles evitam a cria\u00e7\u00e3o prematura de objetos pesados, permitindo uma inicializa\u00e7\u00e3o tardia somente quando requisitada.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Controle de Acesso<\/h3>\n\n\n\n<p>Os Proxies podem ser usados para impor pol\u00edticas de controle de acesso aos objetos reais. Isso \u00e9 especialmente \u00fatil quando se trata de objetos sens\u00edveis que requerem permiss\u00f5es espec\u00edficas para serem manipulados.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. Registro e Monitoramento<\/h3>\n\n\n\n<p>Adicionar funcionalidades de registro (logging) e monitoramento \u00e9 outra aplica\u00e7\u00e3o pr\u00e1tica do Padr\u00e3o Proxy. Os Proxies podem registrar informa\u00e7\u00f5es de acesso, contabilizando quem, quando e como um objeto foi utilizado.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5. Cache<\/h3>\n\n\n\n<p>O uso de Proxies para implementar um cache de resultados \u00e9 uma t\u00e9cnica poderosa para melhorar o desempenho. O Proxy pode armazenar em cache resultados de opera\u00e7\u00f5es caras e servir esses resultados em vez de executar a opera\u00e7\u00e3o novamente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Classes de Proxy<\/h2>\n\n\n\n<p>O Padr\u00e3o Proxy assume diversas formas e apresenta v\u00e1rias varia\u00e7\u00f5es, cada uma com um prop\u00f3sito espec\u00edfico. As classes de Proxy mais comuns incluem:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Proxy Virtual<\/h3>\n\n\n\n<p>Um Proxy Virtual gerencia a cria\u00e7\u00e3o tardia de objetos pesados, como imagens de alta resolu\u00e7\u00e3o ou grandes conjuntos de dados. Ele mant\u00e9m uma refer\u00eancia para o objeto real e o cria somente quando \u00e9 solicitado.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Proxy Remoto<\/h3>\n\n\n\n<p>O Proxy Remoto \u00e9 usado em sistemas distribu\u00eddos para representar objetos que residem em diferentes locais geogr\u00e1ficos ou endere\u00e7os de mem\u00f3ria. Ele facilita a comunica\u00e7\u00e3o entre sistemas remotos, permitindo que o cliente acesse objetos em outro contexto.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Proxy de Prote\u00e7\u00e3o<\/h3>\n\n\n\n<p>Um Proxy de Prote\u00e7\u00e3o controla o acesso a um objeto, verificando as permiss\u00f5es do cliente antes de permitir que ele acesse o objeto real. Isso \u00e9 vital para garantir que apenas usu\u00e1rios autorizados possam manipular o objeto.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. Proxy de Cache<\/h3>\n\n\n\n<p>O Proxy de Cache armazena em cache os resultados de opera\u00e7\u00f5es custosas para melhorar o desempenho. Ele verifica se o resultado desejado j\u00e1 est\u00e1 em cache antes de executar a opera\u00e7\u00e3o real.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Implementa\u00e7\u00f5es em Linguagens de Programa\u00e7\u00e3o<\/h2>\n\n\n\n<p>A implementa\u00e7\u00e3o do Padr\u00e3o Proxy pode variar amplamente dependendo da linguagem de programa\u00e7\u00e3o escolhida. Vamos explorar como esse padr\u00e3o pode ser implementado em duas linguagens populares: Java e Python.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Implementa\u00e7\u00e3o em Java<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" style=\"font-size:.875rem;line-height:1.25rem\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#39404f;color:#c8d0e0\">Java<\/span><span role=\"button\" tabindex=\"0\" data-code=\"interface Image {\n    void display();\n}\n\nclass RealImage implements Image {\n    private String filename;\n\n    public RealImage(String filename) {\n        this.filename = filename;\n        loadImageFromDisk();\n    }\n\n    private void loadImageFromDisk() {\n        System.out.println(&quot;Loading &quot; + filename);\n    }\n\n    public void display() {\n        System.out.println(&quot;Displaying &quot; + filename);\n    }\n}\n\nclass ProxyImage implements Image {\n    private RealImage realImage;\n    private String filename;\n\n    public ProxyImage(String filename) {\n        this.filename = filename;\n    }\n\n    public void display() {\n        if (realImage == null) {\n            realImage = new RealImage(filename);\n        }\n        realImage.display();\n    }\n}\n\n\/\/\/ Fonte: ChatGPT\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\"><code><span class=\"line\"><span style=\"color: #81A1C1\">interface<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Image<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">display<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">RealImage<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">implements<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB; font-weight: bold\">Image<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">private<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">String<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">filename<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">RealImage<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #8FBCBB\">String<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">filename<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">this<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">filename<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> filename<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">loadImageFromDisk<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">private<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">loadImageFromDisk<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #D8DEE9\">System<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">out<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">println<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Loading <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> filename<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">display<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #D8DEE9\">System<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">out<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">println<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Displaying <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> filename<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">ProxyImage<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">implements<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB; font-weight: bold\">Image<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">private<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">RealImage<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">realImage<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">private<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">String<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">filename<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">ProxyImage<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #8FBCBB\">String<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">filename<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">this<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">filename<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> filename<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">display<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">realImage <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">null<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            realImage <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">RealImage<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">filename<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #D8DEE9\">realImage<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">display<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/\/ Fonte: ChatGPT<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Implementa\u00e7\u00e3o em Python<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" style=\"font-size:.875rem;line-height:1.25rem\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#39404f;color:#c8d0e0\">Python<\/span><span role=\"button\" tabindex=\"0\" data-code=\"from abc import ABC, abstractmethod\n\nclass Image(ABC):\n    @abstractmethod\n    def display(self):\n        pass\n\nclass RealImage(Image):\n    def __init__(self, filename):\n        self._filename = filename\n        self.load_image_from_disk()\n\n    def load_image_from_disk(self):\n        print(f&quot;Loading {self._filename}&quot;)\n\n    def display(self):\n        print(f&quot;Displaying {self._filename}&quot;)\n\nclass ProxyImage(Image):\n    def __init__(self, filename):\n        self._filename = filename\n        self._real_image = None\n\n    def display(self):\n        if self._real_image is None:\n            self._real_image = RealImage(self._filename)\n        self._real_image.display()\n}\n\n# Fonte: ChatGPT\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\"><code><span class=\"line\"><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> abc <\/span><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> ABC<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> abstractmethod<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Image<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">ABC<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">@<\/span><span style=\"color: #D08770\">abstractmethod<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">def<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">display<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">pass<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">RealImage<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #8FBCBB; font-weight: bold\">Image<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">def<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">__init__<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">filename<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">_filename <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> filename<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">load_image_from_disk<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">def<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">load_image_from_disk<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">print<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">f<\/span><span style=\"color: #A3BE8C\">&quot;Loading <\/span><span style=\"color: #EBCB8B\">{<\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">_filename<\/span><span style=\"color: #EBCB8B\">}<\/span><span style=\"color: #A3BE8C\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">def<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">display<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">print<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">f<\/span><span style=\"color: #A3BE8C\">&quot;Displaying <\/span><span style=\"color: #EBCB8B\">{<\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">_filename<\/span><span style=\"color: #EBCB8B\">}<\/span><span style=\"color: #A3BE8C\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">ProxyImage<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #8FBCBB; font-weight: bold\">Image<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">def<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">__init__<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">filename<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">_filename <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> filename<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">_real_image <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">None<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">def<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">display<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">_real_image <\/span><span style=\"color: #81A1C1\">is<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">None<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">_real_image <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">RealImage<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">_filename<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">_real_image<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">display<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># Fonte: ChatGPT<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Conclus\u00e3o<\/h2>\n\n\n\n<p>O Padr\u00e3o Proxy \u00e9 muito mais do que apenas uma abordagem para o &#8220;Lazy Loading&#8221;. Sua versatilidade permite a implementa\u00e7\u00e3o de solu\u00e7\u00f5es complexas, como controle de acesso, registro, cache e muito mais. Ao compreender profundamente o Padr\u00e3o Proxy e suas diversas facetas, os desenvolvedores s\u00eaniores podem explorar todo o potencial desse padr\u00e3o para criar sistemas mais eficientes e seguros.<\/p>\n\n\n\n<p>Esse conte\u00fado \u00e9 parte do material disponibilizado para os participantes do meu grupo de estudos de&nbsp;<strong>Padr\u00f5es de Projeto<\/strong>. Voc\u00ea quer participar desse grupo?&nbsp;<strong><a href=\"https:\/\/elemarjr.com\/clube-de-estudos\/gof-design-patterns\/\">Clique aqui e veja como funciona<\/a><\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">D\u00favidas Frequentes<\/h2>\n\n\n\n<p><strong>O que \u00e9 o Padr\u00e3o Proxy e quando devo us\u00e1-lo?<\/strong><br>O Padr\u00e3o Proxy \u00e9 um padr\u00e3o de projeto que atua como um intermedi\u00e1rio entre um cliente e um objeto real. Voc\u00ea deve us\u00e1-lo quando desejar controlar o acesso a um objeto complexo, caro de inicializar ou sens\u00edvel, ou quando quiser adicionar funcionalidades como lazy loading, controle de acesso, registro ou caching.<\/p>\n\n\n\n<p><strong>Qual \u00e9 a diferen\u00e7a entre Proxy Virtual e Proxy de Prote\u00e7\u00e3o?<\/strong><br>Um Proxy Virtual adia a cria\u00e7\u00e3o de um objeto real at\u00e9 que seja necess\u00e1rio, economizando recursos. Um Proxy de Prote\u00e7\u00e3o, por outro lado, controla o acesso ao objeto real verificando as permiss\u00f5es do cliente antes de permitir o acesso.<\/p>\n\n\n\n<p><strong>Quais s\u00e3o os benef\u00edcios do uso do Padr\u00e3o Proxy?<\/strong><br>Os benef\u00edcios incluem economia de recursos, inicializa\u00e7\u00e3o tardia de objetos complexos, controle de acesso, registro de atividades e melhoria de desempenho por meio de caching. O padr\u00e3o Proxy ajuda a tornar o sistema mais eficiente e seguro.<\/p>\n\n\n\n<p><strong>Em quais situa\u00e7\u00f5es n\u00e3o devo usar o Padr\u00e3o Proxy?<\/strong><br>Evite o uso do Padr\u00e3o Proxy quando a complexidade que ele adiciona n\u00e3o traz benef\u00edcios claros. Por exemplo, em sistemas simples ou quando o controle de acesso n\u00e3o \u00e9 necess\u00e1rio, a introdu\u00e7\u00e3o de um Proxy pode aumentar a complexidade desnecessariamente. \u00c9 importante avaliar cuidadosamente se o uso do Padr\u00e3o Proxy \u00e9 apropriado para o seu caso de uso.<\/p>\n","protected":false},"featured_media":7887,"parent":0,"template":"","cursos":[7],"class_list":["post-7835","artigos","type-artigos","status-publish","has-post-thumbnail","hentry","cursos-gof"],"acf":[],"_links":{"self":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/artigos\/7835","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/artigos"}],"about":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/types\/artigos"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/media\/7887"}],"wp:attachment":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/media?parent=7835"}],"wp:term":[{"taxonomy":"cursos","embeddable":true,"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/cursos?post=7835"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}