Jdk的静态代理要求,目标对象和代理对象都要实现相同的接口。然后提供给客户端使用。这个代理对客户端是可见的,其结果图如下:
1、接口
package com.wl.jdk.staticproxy;
/**
* 接口
*/
public interface UserService {
public void sayHello(String content);
}
2、目标对象
package com.wl.jdk.staticproxy;
/**
* 实现类(实现接口的目标对象)
*/
public class UserServiceImpl implements UserService{
public void sayHello(String content) {
System.out.println("主人说:" + content);
}
}
}
3、代理类
/**
* 目标对象的代理对象,UserServiceImplProxy拥有目标对象的引用
* @version 2016年8月15日下午1:49:55
* @author wuliu
*/
public class UserServiceImplProxy implements UserService{
private UserService userService;
public UserServiceImplProxy(UserService userService) {
this.userService = userService;
}
public void sayHello(String content) {
System.out.println("开始......");
userService.sayHello(content);
System.out.println("结束......");
}
}
4、测试类
package com.wl.jdk.staticproxy;
public class Client {
public static void main(String[] args) {
UserService userService = new UserServiceImplProxy(new UserServiceImpl());
userService.sayHello("早上好!");
}
}
装饰器模式关注于在一个对象上动态的添加方法,然而代理模式关注于控制对对象的访问。换句话 说,用代理模式,代理类(proxy class)可以对它的客户隐藏一个对象的具体信息。因此,当使用代理模式的时候,我们常常在一个代理类中创建一个对象的实例。并且,当我们使用装饰器模 式的时候,我们通常的做法是将原始对象作为一个参数传给装饰者的构造器。