java多线程--2 静态代理、Lambda表达式
java多线程--2 静态代理、Lambda表达式
静态代理
package com.ssl.demo02;
//静态代理
//真实对象和代理对象都要实现同一个接口
//代理对象必须要代理真实角色
//好处
//代理对象可以做很多真实对象做不了的事情
//真实对象专注做自己的事情
public class StacticProxy {
public static void main(String[] args) {
You you = new You();
//Lamda表达式
new Thread(()-> System.out.println("我爱你")).start();
new WeddingCompany(new You()).HappyMarry();
/**相当于上面一行
WeddingCompany weddingCompany = new WeddingCompany(new You());
weddingCompany.HappyMarry();
*/
}
}
interface Marry{
/**人间四大喜事
* 久旱逢甘霖
* 他乡遇故知
* 洞房花烛夜
* 金榜题名时
*/
void HappyMarry();
}
//真实角色
class You implements Marry{
@Override
public void HappyMarry() {
System.out.println("happy");
}
}
//代理角色,帮You 结婚
class WeddingCompany implements 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表达式(JDK8新增)
- 希腊字母表中的第十一个字母,英文名称为Lambda
- 作用:
- 避免匿名内部类太多
- 可以让代码看起来更简洁
- 去掉了一对没有意义的代码,只留下核心逻辑
- 实质:属于函数式编程的概念
(params) ->expression[表达式] a -> System.out.println("i like lambda-->"+a);
(params) ->statement[语句]
(params) ->{statements}
关键:
函数式接口:
- 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口
- 对于函数式接口,我们可以通过lambda表达式来创建改接口的对象。
代码不断简化的过程 函数式接口
- 实现类->静态内部类->局部内部类->匿名内部类->Lanbda实现
无参案例
package com.ssl.demo02;
public class TestLambda {
//3.静态内部类
static class Like2 implements ILike{
@Override
public void lambda() {
System.out.println("I like lambda2");
}
}
public static void main(String[] args) {
//接口new了一个实现类
ILike like = new Like();
like.lambda();
like = new Like2();
like.lambda();
//4.局部内部类
class Like3 implements ILike{
@Override
public void lambda() {
System.out.println("I like lambda3");
}
}
like = new Like3();
like.lambda();
//5.匿名内部类,没有类的名称,必须借助接口或者父类
like = new ILike() {
@Override
public void lambda() {
System.out.println("I like lambda4");
}
};
like.lambda();
//6.Lambda简化
like = () -> System.out.println("I like lambda5");
like.lambda();
}
}
//1.定义一个函数式接口
interface ILike{
void lambda();
}
//2.实现类
class Like implements ILike{
@Override
public void lambda() {
System.out.println("I like lambda");
}
}
有参案例
package com.ssl.demo02;
public class TestLamvda2 {
//3.静态内部类
static class Love2 implements ILove{
@Override
public void love(int a) {
System.out.println("I love2 "+a);
}
}
public static void main(String[] args) {
ILove love = new Love();
love.love(1);
love = new Love2();
love.love(2);
//4.局部内部类
class Love3 implements ILove{
@Override
public void love(int a) {
System.out.println("I love3 "+a);
}
}
love = new Love3();
love.love(3);
//5.匿名内部类
love = new ILove() {
@Override
public void love(int a) {
System.out.println("I love4 "+a);
}
};
love.love(4);
//6.Lambda实现
love = (a) -> System.out.println("I love5 "+a);
love.love(5);
love = a -> System.out.println("I love6 "+a);
love.love(6);
/**总结
* 1.Lambda表达式只能有一行代码的情况下才能简化成为一行,如果有多行,那么就用代码块包裹。
* 2.前提是接口为函数式接口
* 3.多个参数可以去掉参数类型
* 4.多个参数必须加括号
*/
}
}
//1.定义接口
interface ILove{
void love(int a);
}
//2.实现类
class Love implements ILove{
@Override
public void love(int a) {
System.out.println("I love "+a);
}
}

浙公网安备 33010602011771号