静态代理
什么是静态代理?
静态代理是一种设计模式
为什么有静态代理?
他的作用是在不改变原有方法的基础上,增强方法,经典的应用场景包括拦截器,通知等,如果都没有接触过,举生活中的例子,电商的核心是买卖商品,而电商代理可以更好的帮助商家提供售前和售后服务,电商只关注买卖商品即可。
如果使用静态代理?
- 创建一个接口
- 真实角色创建一个实现类实现该接口,实现核心任务
- 代理角色创建一个实现类实现该接口,核心任务嵌入到增强方法中
- 创建真实角色对象
- 创建代理角色对象,真实角色作为入参
- 代理角色调用增强方法
静态代理案例
接口:
package staticproxy.learn;
// 1.电子商铺
public interface ElectronicStore {
// 采购
void vurchasing();
// 卖出
void sellOut();
}
真实角色类:
package staticproxy.learn;
// 2. 商家
public class StoreBoss implements ElectronicStore {
@Override
public void vurchasing() {
System.out.println("采购商品");
}
@Override
public void sellOut() {
System.out.println("卖出商品");
}
}
代理角色类:
package staticproxy.learn;
// 3. 商铺代理
public class StoreProxy implements ElectronicStore {
private ElectronicStore electronicStore;
public StoreProxy(ElectronicStore electronicStore) {
super();
this.electronicStore = electronicStore;
}
@Override
public void vurchasing() {
System.out.println("根据销量排序列出采购推荐");
electronicStore.vurchasing();
}
@Override
public void sellOut() {
System.out.println("提供24小时的售前服务");
electronicStore.sellOut();
System.out.println("提供及时的售后服务");
}
}
入口类:
package staticproxy.learn;
public class RunStoreProxy {
public static void main(String[] args) {
// 4
ElectronicStore electronicStore = new StoreBoss();
// 5
StoreProxy storeProxy = new StoreProxy(electronicStore);
// 6
storeProxy.vurchasing();
storeProxy.sellOut();
}
}
多线程中静态代理
- 自定义类实现Runnable接口,重写run方法
- Thread类(代理角色)同样继承了Runnable接口
- Thread类对象调用start方法增强了run方法的运行,增强效果是开辟了一个新的线程异步执行run方法业务逻辑