- 总结:
真实对象和代理对象都要事先同一个接口
代理对象要代理真实角色
-
好处
代理对象可以做很多真实对象做不了的事情
真实对象专注做自己的事情
结婚例子:结婚对象(真实对象),婚庆公司(代理对象)
代码
package com.wang.Thread;
//静态代理模式
public class TestThread06 {
public static void main(String[] args) {
WeddingCompany weddingcompany= new WeddingCompany(new You());
weddingcompany.HappyMarry();
}
}
//Marry接口
interface Marry{
void HappyMarry();
}
//真实的人,你去结婚
class You implements Marry{
@Override
public void HappyMarry() {
System.out.println("我要结婚啦!!");
}
}
//代理角色,帮助你结婚
class WeddingCompany implements Marry{
private Marry target;
public WeddingCompany(Marry target){
this.target = target;
}
@Override
public void HappyMarry() {
before();
target.HappyMarry();
after();
}
void before(){
System.out.println("布置现场");
}
void after(){
System.out.println("收礼金");
}
}
结果
布置现场 我要结婚啦!! 收礼金
婚庆公司的例子和多线程开启的对比
//Thread和继承Runnable接口的类都结继承Runnable
new Thread(()-> System.out.println("我爱你")).start();
//WeddingCompany和You全都继承Marry接口
new WeddingCompany(new You()).HappyMarry();
总结:Thread就相当于婚庆公司,做代理!!!()-> System.out.println(“海绵宝宝”)这句话是继承Runnable接口类的run()方法内容。用lamda表达式,因为有函数式接口Runnable。
例如
package com.wang.Thread;
public class Demo01 {
public static void main(String[] args) {
ThreadTest threadTest = new ThreadTest();
//以下两种方法都可以实现run方法
new Thread(threadTest).start();
new Thread(()->System.out.println("海绵宝宝")).start();
}
}
class ThreadTest implements Runnable{
@Override
public void run() {
System.out.println("派大星");
}
}
派大星 海绵宝宝



