# Java笔记(12) 静态代理
静态代理可以在不改变原有代码的情况下,增加新的功能和操作,对原有对象进行扩展。
静态代理要求真实对象和代理对象都实现同一个接口,由代理对象代理真实角色的接口实现,并在实现前后增加新的操作。
public class StaticProxy{
public static void main(String[] args){
Person person = new Person("张三");
//由代理对象代理真实对象的方法
new WeddingCompany(person).happyMarry();
}
}
//要实现的接口
interface Marry{ void happyMarry();}
//真实对象
class Person implements Marry{
private String name;
public Person(String name){this.name = name;}
public void happyMarry(){ //实现接口
System.out.println(this.name + " is gonna married, Happy!");
}
}
//代理对象
class WeddingCompany implements Marry{
private Person person;
public void WeddingCompany(Person person){ this.person = person; }
public void happyMarry(){//实现接口的方法
before(); //代理过程中额外添加的操作
person.happyMarry(); //真实对象的操作
after(); //代理过程中额外添加的操作
}
public void before(){System.out.println("Before wedding, set up the scene...")}
public void after(){System.out.println("After wedding, clean up after...");}
}
在之前的笔记(11)中已经出现过静态代理了,创建多线程的方法中,提到的第一种方法是直接继承Thread类,第二种方法是实现Runnable接口,然后创建Thread类,将待执行线程作为参数传递进去,调用start()方法启动。
public static void main(String[] args) {
TestThread testThread = new TestThread();//创建真实对象
new Thread(testThread).start();//由代理对象代理执行
for (int i = 0; i < 5; i++) {
System.out.println("main 方法线程: " + i);
}
}
实际上这就是静态代理了,TestThread是真实对象,Thread是代理对象,二者都实现了Runnable接口,由Thread类代理执行待执行线程。
静态代理可以做很多真实对象做不了的事情,而真实对象可以专注做自己的事情。