Java装饰品器模式和代理模式都是常见的设计模式,这两种模式都可以增强对象的功能。
Java装饰品器模式
public interface Component { void operation(); } public class ConcreteComponent implements Component { @Override public void operation() { System.out.println("执行操作"); } } public class Decorator implements Component { private Component component; public Decorator(Component component) { this.component = component; } @Override public void operation() { component.operation(); } } public class ConcreteDecorator extends Decorator { public ConcreteDecorator(Component component) { super(component); } @Override public void operation() { super.operation(); System.out.println("增强功能"); } } public class Client { public static void main(String[] args) { Component component = new ConcreteComponent(); component = new ConcreteDecorator(component); component.operation(); } }
在这段代码中,Component
是基础接口,ConcreteComponent
是基础接口的实现类。在Decorator
中,也实现了Component
接口。ConcreteDecorator
继承了Decorator
,并且增强了功能。
最终在客户端中,先创建基础对象,然后使用装饰品器模式,增强对象的功能。
Java代理模式
public interface Subject { void request(); } public class RealSubject implements Subject { @Override public void request() { System.out.println("执行操作"); } } public class Proxy implements Subject { private Subject subject; public Proxy(Subject subject) { this.subject = subject; } @Override public void request() { System.out.println("执行前操作"); subject.request(); System.out.println("执行后操作"); } } public class Client { public static void main(String[] args) { Subject subject = new RealSubject(); subject = new Proxy(subject); subject.request(); } }
在这段代码中,Subject
是接口,RealSubject
是接口的实现类。Proxy
实现了Subject
接口,并且持有一个Subject
实例。
在Proxy
中,实现了增强Subject
的功能。
最终在客户端中,先创建基础对象,然后使用代理模式,增强对象的功能。