1. 静态代理模式的优点
a)业务类只需要关注业务逻辑本身,保证了业务类的重要性
b)代理类只需要为业务类提供 准备工作 和 善后工作。具体的 业务工作 由业务类自己实现
譬如:Thread为代理类 Runnable为业务类
Thread的start方法
1. 创建线程的相关工作
2. 调用Runnable实现的run方法(由Runnable实现类去实现具体业务)
3. 回收线程的相关工作
静态代理一定程度上实现了解耦合。也是封装的一大体现
把相同的工作(创建线程、回收线程)提取出来封装成一个类
把业务的具体实现 交给另一个类 业务类去具体实现
代理类只需要调用业务类的接口即可
2. 静态代理模式的缺点
a) 代码重用性不强,只能代理一类事物。如果有100个不同的业务,代理的内容都不相同。那么就得有100个代理类
3. 静态代理模式为什么不用继承实现?
a) 继承只能是单继承,而接口时多实现的
b). 如果静态代理模式用继承实现,那么业务类继承了 代理抽象类 就不能再继承别的类了。
c) 用接口去实现的话,业务类就可以继承别的类,并且又可以实现别的接口
/**
* 静态代理
* 接口:
* 1、真实角色
* 2、代理角色
*/
public class StaticProxy {
public static void main(String[] args) {
// new Thread(new RunnableImpl()).start();
new WeddingCompany(new You()).happyMarry();
}
}
// 接口
interface Marry {
void happyMarry();
}
// 真实角色
class You implements Marry {
@Override
public void happyMarry() {
System.out.println("you and me终于结婚了...");
}
}
class WeddingCompany implements Marry {
//真实角色
private Marry target;
public WeddingCompany(Marry target) {
this.target = target;
}
@Override
public void happyMarry() {
ready();
this.target.happyMarry();
after();
}
private void after() {
System.out.println("收拾场地");
}
private void ready() {
System.out.println("布置场地");
}
}