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"); } }
在代理模式中,一个类代表另一个类的功能。
代理模式是一种结构模式。
在代理模式中,我们创建具有原始接口的对象,以将其功能暴露给外部世界。
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面向对象设计 - Java导入导入声明用于将任何类型导入编译单元。导入声明出现在包声明之后,第一个类型声明之前。有两种类型...
Java面向对象设计 -Java方法重载在同一类中具有多个具有相同名称的方法称为方法重载。类中具有相同名称的方法可以是声明的方法,...
Java面向对象设计 -Java varargs方法术语“varargs是“可变长度参数的缩写。varargs声明一个接受可变数量的参数(或参数)的方法...
Java面向对象设计 -Java不可变对象在创建状态后无法更改其状态的对象称为不可变对象。一个对象不可变的类称为不可变类。不变的对...