静态代理模式
真实对象和代理对象都要实现同一个接口
代理对象要代理真实对象
public class StacticProxy {
public static void main (String[] args) {
weddingCompany weddingCompany = new WeddingCompany (new You() ) ;
weddingCompany . HappyMarry() ;
}
}
interface Marry {
void HappyMarry() ;
}
//真实角色,你去结婚
class You imp1ements Marry{
@override
public void HappyMarry() {_
System. out. println("秦老师要结婚了,超开心") ;
}
}
//代理角色,帮助你结婚
class WeddingCompany imp1ements Marry {
//代理--->真实目标角色
private Marry target;
public WeddingCompany (Marry target) {
this. target = target;
}
@Override
public void HappyMarry() {
before () ;
this. target. HappyMarry(); //这就是真实对象
after () ;
}
private void after () {
System. out. println("结婚之前,布置现场");
}
private void before() {
System. out. println("结婚之后,收尾款");
}
}
好处:
代理对象可以做很多真是对象做不了的事情
真实对象专注做自己的事情
Lamda表达式
意义: 避免匿名类定义过多;可以简洁代码,留下核心的逻辑
函数式接口的定义:
任何接口,如果只包含唯一一个抽象方法, 那么它就是一个函数式接口。
public interface Runnable {
public abstract void run(
}
}
对于函数式接口,我们可以通过lambda表达式来创建该接口的对象。
public class TestLamdba2 {
public static void main (String[] args) {
ILove love = null;
love = (a,b,c)-> {
System. out.println("i love you-->"+a) ;
Sys tem. out.println("i love you-->too") ;
};
love. love( 520, 502, 250) ;
}
}
interface ILove{ [
void love (int a, int b, int c) ;
}
总结:
Lamdba表达式在只有一行代码的情况下才能简化成为一行,如果由多行,那么就用代码块包裹。
前提是接口为函数式接口
多个参数也可以去掉参数类型,要去掉就都去掉,必须加上括号