/**
* 静态代理模式:
* 代理对象和真实对象实现同一个接口
* 代理对象要代理真实对象
*/
public class DemoStaticProxy {
public static void main(String[] args) {
System.out.println("------你自己租房");
Rent rent1 = new You();
rent1.checkIn();
// 简写
new You().checkIn();
System.out.println("------中介帮你租房");
Rent rent2 = new Agent(new You());
rent2.checkIn();
// 简写
new Agent(new You()).checkIn();
System.out.println("------1");
// 匿名内部类写法
new Agent(new Rent() {
@Override
public void checkIn() {
System.out.println("Agent类代理匿名内部类");
}
}).checkIn();
// Lambda表达式写法
new Agent(() -> System.out.println("Agent类代理匿名内部类")).checkIn();
System.out.println("------2");
// 匿名内部类写法
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Thread类代理匿名内部类");
}
}).start();
// Lambda表达式写法
new Thread(() -> System.out.println("Thread类代理匿名内部类")).start();
}
}
/**
* 接口
*/
interface Rent {
void checkIn();
}
/**
* 真实对象
*/
class You implements Rent {
@Override
public void checkIn() {
System.out.println("省心入住");
}
}
/**
* 代理对象
*/
class Agent implements Rent {
private Rent rent;
public Agent(Rent rent) {
this.rent = rent;
}
@Override
public void checkIn() {
before();
this.rent.checkIn();
after();
}
private void before() {
System.out.println("办理入住手续");
}
private void after() {
System.out.println("办理退房手续");
}
}
输出结果:
------你自己租房
省心入住
省心入住
------中介帮你租房
办理入住手续
省心入住
办理退房手续
办理入住手续
省心入住
办理退房手续
------1
办理入住手续
Agent类代理匿名内部类
办理退房手续
办理入住手续
Agent类代理匿名内部类
办理退房手续
------2
Thread类代理匿名内部类
Thread类代理匿名内部类