1, 介绍.
先创建 java 代码, 再进行编译. 在运行前, 代理类的. class 文件已存在. 事先知道要代理的是什么, 通常只代理一个类.
优点: 不需要知道委托类(实现类), 只需知道代理即可.
缺点:(1)代码重复. 代理类和委托类 (实现类) 实现了相同的接口.
(2)维护复杂. 接口增加一个方法, 代理类和委托类 (实现类) 都需要实现此方法.
(3)不灵活. 代理类和委托类 (实现类) 的关系为一对一, 无法一对多.
2, 代码. Proxy.java,StaticProxyInherit.java,StaticProxy.java,UserServiceImpl.java,IUserService.java,User.java.
- package com.zxj.test.proxy;
- import com.zxj.dao.entity.User;
- import com.zxj.dao.service.impl.UserServiceImpl;
- public class Proxy {
- private static void staticProxy() {
- User user = new User();
- user.setAge(11);
- user.setName("卓小杰");
- // 继承委托类 (实现类) 的方式
- StaticProxyInherit staticProxyInherit = new StaticProxyInherit();
- staticProxyInherit.printInfo(user);
- // 实现接口的方式
- StaticProxy staticProxy = new StaticProxy(new UserServiceImpl());
- staticProxy.printInfo(user);
- }
- public static void main(String[] args) {
- staticProxy();
- }
- }
- package com.zxj.test.proxy;
- import com.zxj.dao.entity.User;
- import com.zxj.dao.service.impl.UserServiceImpl;
- public class StaticProxyInherit extends UserServiceImpl {
- @Override
- public void printInfo(User user) {
- System.out.println("before to do someThing");
- super.printInfo(user);
- System.out.println("after to do someThing");
- }
- }
- package com.zxj.test.proxy;
- import com.zxj.dao.entity.User;
- import com.zxj.dao.service.IUserService;
- import com.zxj.dao.service.impl.UserServiceImpl;
- public class StaticProxy implements IUserService {
- private UserServiceImpl userService;
- public StaticProxy(UserServiceImpl userService) {
- this.userService = userService;
- }
- @Override
- public void printInfo(User user) {
- System.out.println("before to do someThing");
- userService.printInfo(user);
- System.out.println("after to do someThing");
- }
- }
- package com.zxj.dao.service.impl;
- import com.zxj.dao.entity.User;
- import com.zxj.dao.service.IUserService;
- public class UserServiceImpl implements IUserService {
- @Override
- public void printInfo(User user) {
- System.out.println(String.format("%s 已经 %d 岁了", user.getName(), user.getAge()));
- }
- }
- package com.zxj.dao.service;
- import com.zxj.dao.entity.User;
- public interface IUserService {
- void printInfo(User user);
- }
- package com.zxj.dao.entity;
- public class User {
- private String name;
- private int age;
- public User(){
- }
- public User(String name, int age) {
- this.name = name;
- this.age = age;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- }
3, 结果.
<ignore_js_op>
来源: http://www.bubuko.com/infodetail-3438968.html