首先什么是静态代理?
代理,你最先想到的是什么?婚介还是房产中介?
对没错,就是这个.
上图.
当你需要找房子的时候不是和房东直接沟通而是和房产中介来进行交互
静态代理模式的构成
静态代理模式由三个部分构成:
.一个公共的接口
.一个代理角色
.一个被代理角色
首先我们先拿这个租房子来做一个例子
//接口
//这是你要对房子做出的行为
public interface Rent {void rent();}
package com.xinzhi;
/**
* @author LZP
* @create 2020/7/20
*/
//房东类
//房东
public class Host implements Rent {
@Override
public void rent() {
System.out.println("出租房子");
}
}
package com.xinzhi;
/**
* @author LZP
* @create 2020/7/20
*/
//代理
//代理中介
//中介可以在这个类进行自己的操作
public class Proxy implements Rent {
private Host host;
public Proxy() {}
public Proxy(Host host) {
this.host = host;
}
@Override
public void rent() {host.rent();seeHouse();payfor();}
public void seeHouse(){System.out.println("中介带你看房子");}
public void payfor(){ System.out.println("中介收钱");}
}
package com.xinzhi;
/**
* @author LZP
* @create 2020/7/20
*/
public class Test1 {
public static void main(String[] args) {
//新建房东类
Host host = new Host(); //房东
//找的是代理
Proxy proxy = new Proxy(host); //代理代理的是host,此时的代理就相当于房东
proxy.rent();
}
}
-
控制台打印结果
出租房子
中介带你看房子
中介收钱
带入到增删改查的简单业务中
package com.xinzhi2;
/**
* @author LZP
* @create 2020/7/20
*/
//接口
public interface UserService {
void add();
void delete();
void select();
void update();
}
package com.xinzhi2;
/**
* @author LZP
* @create 2020/7/20
*/
//接口实现类
public class UserServiceImpl implements UserService {
@Override
public void add() {
System.out.println("这是add");
}
@Override
public void delete() {
System.out.println("这是delete");
}
@Override
public void select() {
System.out.println("这是select");
}
@Override
public void update() {
System.out.println("这是update");
}
}
package com.xinzhi2;
/**
* @author LZP
* @create 2020/7/20
*/
//当你想在方法中进行操作时
public class UserServiceProxy implements UserService {
private UserServiceImpl userService;
public void setUserService(UserServiceImpl userService) {
this.userService = userService;
}
@Override
public void add() {
log("add");
userService.add();
}
@Override
public void delete() {
log("delete");
userService.delete();
}
@Override
public void select() {
log("select");
userService.select();
}
@Override
public void update() {
log("update");
userService.update();
}
//日志方法
public void log(String log) {
System.out.println("这是" + log + "方法");
}
}
package com.xinzhi2;
/**
* @author LZP
* @create 2020/7/20
*/
public class Test1 {
public static void main(String[] args) {
UserServiceImpl userService = new UserServiceImpl();
UserServiceProxy userServiceProxy = new UserServiceProxy();
userServiceProxy.setUserService(userService);
userServiceProxy.add();
}
}
结果留给你打印试试看.