多线程(二)————静态代理和Lamda表达式

03 静态代理模式

  1. 真实对象和代理对象都要实现一个接口;
  2. 代理对象一定要代理真实对象;
  3. 代理对象可以做真实对象做不了的事情;
  4. 真实对象专注做自己的事情;
    在前面多线程创建中的“实现Runnable”接口方法中,线程的启动应该(?)使用的就是代理。
	public class Test1 {
   public static void main(String[] args) {
       Ck ck = new Ck(new Hyx());
       ck.HappyMarry();

   }
}

interface Marry{
   void HappyMarry();
}
//真实角色
class Hyx implements Marry{
   @Override
   public void HappyMarry(){
       System.out.println("hyx和tzt结婚了!!超开心!!");
   }
}
//代理角色
class Ck implements Marry{
   //被代理对象
   private Marry target;
   public Ck(Marry target) {
       this.target=target;
   }
   @Override
   public void HappyMarry() {
       before();
       //真实对象动作
       this.target.HappyMarry();
       after();
   }

   private void after() {
       System.out.println("CK结婚之后,收尾款");
   }

   private void before() {
       System.out.println("CK结婚之前,布置现场");
   }
}

04 Lamda表达式

  • 避免匿名内部类定义过多
  • 让代码看起来更简洁
  • Lamda表达式可以创建函数式接口的对象,所谓函数式接口即只包含一个抽象方法的接口()
public class Test2 {
   //内部静态类
   static class Myclass2 implements inter{
       @Override
       public void lamda() {
           System.out.println("!!!!!!!");
       }
   }
   public static void main(String[] args) {
       //实现类
       inter c1=new Myclass();
       c1.lamda();
       //内部静态类
       c1=new Myclass2();
       c1.lamda();
       //局部内部类
       class Myclass3 implements inter{
           @Override
           public void lamda() {
               System.out.println("############");
           }
       }
       c1=new Myclass3();
       c1.lamda();
       //匿名内部类
       c1=new inter() {
           @Override
           public void lamda() {
               System.out.println("$$$$$$$$$$");
           }
       };
       c1.lamda();
       //Lamda表达式
       c1 = ()->{ System.out.println("^^^^^^^^"); };
       c1.lamda();
   }
}
//函数式接口
interface inter{
   void lamda();
}
//实现类
class Myclass implements inter{
   @Override
   public void lamda() {
       System.out.println("??????");
   }
}

在使用Lamda表达式声明时:

  • 可以省去参数类型(多个参数必须同时省去)
  • 可以省去“()”(在有且只有一个参数时)
  • 可以省去“{}”(在所包含代码块中只有一句话时(和if省略类似))

你可能感兴趣的:(追随狂神学Java,java,lambda)