Java之多线程内部概念

  • 静态代理模式

总结:

真实对象和代理对象都要实现同一个接口

代理对象要代理真实角色(传递一个真实角色类型的实参)

好处:代理对象可以做很多真实对象做不了的事情

        真实对象专注做自己的事情

实现方法类似多线程new Thread(...).start();

package 静态代理;

public class StaticProxy{
    public static void main(String[] args) {
//       Wedding wedding = new Wedding(new You());
//       wedding.HappyMarry();
         new Wedding(new You()).HappyMarry();//与上述等价
    }
}
interface Marry{
    void HappyMarry();
}
//真实角色,我去结婚
class You implements Marry{
    @Override
    public void HappyMarry() {
        System.out.println("我要结婚了");
    }
}
//代理角色,帮助我结婚
class Wedding implements Marry{
    private Marry target;//代理真实角色
    public Wedding(Marry target){
        this.target = target;
    }
    @Override
    public void HappyMarry() {
        after();
        this.target.HappyMarry();//真实对象
        before();
    }
    private void before() {
        System.out.println("结婚之后,收尾款");
    }
    private void after() {
        System.out.println("结婚之前,布置现场");
    }
}
/*
结婚之前,布置现场
我要结婚了
结婚之后,收尾款
*/
  • Lamda表达式

 主要作用为简化程序,避免匿名内部类定义过多,去掉没有意义的代码,只留下核心的逻辑

函数式接口的定义:任何接口,若只包含唯一一个抽象方法,那么他就是函数式接口。

package Lamda;
/*
推导Lamda表达式
*/
public class TestLamda1 {
    //3.静态内部类
    static class Like2 implements ILike{
        @Override
        public void lamda() {
            System.out.println("I like lamda2");
        }
    }
    public static void main(String[] args) {
        new Like().lamda();
        Like2 like2 = new Like2();
        like2.lamda();
        //4.局部内部类
        class Like3 implements ILike{
            @Override
            public void lamda() {
                System.out.println("I like lamda3");
            }
        }
        Like3 like3 = new Like3();
        like3.lamda();
        //5.匿名内部类,没有类的名称,必须借助接口或者父类
        new ILike(){
            @Override
            public void lamda() {
                System.out.println("I like lamda4");
            }
        }.lamda();
        //6.用Lamda简化 必须要函数式接口才能实现
        ILike iLike = new Like();
        iLike = ()->{
            System.out.println("I like lamda5");
        };
        iLike.lamda();
    }
}
//1.定义函数式接口
interface ILike{
    void lamda();
}
//2.实现类
class Like implements ILike{
    @Override
    public void lamda() {
        System.out.println("I like lamda");
    }
}
/*I like lamda
  I like lamda2
  I like lamda3
  I like lamda4
  I like lamda5*/
  • Lamda表达式的简化
package Lamda;

public class TestLamba2 {
    public static void main(String[] args){
        lamba ll = (int a)->{
            System.out.println("new lamda表达式" + a);
        };
        ll.l(521);
        //简化1.去掉参数类型
        ll = (a)->{
            System.out.println("Lamda简化1");
        };
        ll.l(1);
        //简化2.简化括号
        ll = a->{
            System.out.println("Lamda简化2");
        };
        ll.l(2);
        //简化3.去掉花括号
        ll = a-> System.out.println("终极简化3");
        ll.l(3);
        //总结:简化3.Lamda表达式只能有一行代码的情况下才能简化成为一行,如果有多行就用代码块包裹即带上花括号
        //接口必须是函数式
        //多参数就要带上括号
    }
}
interface lamba{
    void l(int a);
}
/*new lamda表达式521
Lamda简化1
Lamda简化2
终极简化3
*/

 

上一篇:[Java8] lamda表达式一览


下一篇:Docker ElK安装部署使用教程