举报投诉联系我们 手机版 热门标签 编程学
您的位置:编程学 > java代理模式详解 Java 代理模式

java代理模式详解 Java 代理模式

2023-03-25 03:18 Java教程

java代理模式详解 Java 代理模式

java代理模式详解

Java代理模式是一种常用的设计模式,它可以在不改变原有对象的基础上,在运行时为其添加额外的功能。它通过创建一个代理对象来包装原有对象,从而实现对原有对象的功能扩展。

Java代理模式分为静态代理和动态代理两种形式。静态代理是在编译时就已经存在的,它是由程序员创建或特定工具自动生成源代码,再对其编译。而动态代理则是在运行时动态生成的,即在程序运行时通过反射机制动态创建而成。

// 静态代理 
public interface Subject { 
    public void request(); 
} 
public class RealSubject implements Subject { 

    @Override 
    public void request() { 
        System.out.println("real subject execute request"); 

    } 
} 
public class ProxySubject implements Subject { 

    private RealSubject realSubject; 

    @Override 
    public void request() {  

        preRequest();  

        if (realSubject == null) {  

            realSubject = new RealSubject();  

        }  

        realSubject.request();  

        postRequest();  

    }  

    public void preRequest() {  

        System.out.println("pre request");  

    }  

    public void postRequest() {  

        System.out.println("post request");  

    }  
}

Java 代理模式

Java设计模式 - 代理模式


在代理模式中,一个类代表另一个类的功能。

代理模式是一种结构模式。

在代理模式中,我们创建具有原始接口的对象,以将其功能暴露给外部世界。

例子

interface Printer {
   void print();
}
class ConsolePrinter implements Printer {
   private String fileName;

   public ConsolePrinter(String fileName){
      this.fileName = fileName;
   }
   @Override
   public void print() {
      System.out.println("Displaying " + fileName);
   }
}
class ProxyPrinter implements Printer{
   private ConsolePrinter consolePrinter;
   private String fileName;

   public ProxyPrinter(String fileName){
      this.fileName = fileName;
   }

   @Override
   public void print() {
      if(consolePrinter == null){
         consolePrinter = new ConsolePrinter(fileName);
      }
      consolePrinter.print();
   }
}
public class Main {
  
   public static void main(String[] args) {
      Printer image = new ProxyPrinter("test");
      image.print();   
   }
}

上面的代码生成以下结果。

阅读全文
以上是编程学为你收集整理的java代理模式详解 Java 代理模式全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 编程学 bianchengxue.com 版权所有 联系我们
桂ICP备19012293号-7 返回底部