23day

day23

静态代理

package com.StaticProxy;

import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
/*
静态代理模式
真实对象和代理对象都要实现同一个接口
优点:代理对象可以做许多自己做不了的事
真实对象专注做自己的事情
*/
public class StaticProxy {
   public static void main(String[] args) {

       You you = new You();//你要结婚
       new Thread(()-> System.out.println("我爱你")).start();
       new WeddingCompany(you).HappyMarry();

       //WeddingCompany weddingCompany = new WeddingCompany(you);
       //weddingCompany.HappyMarry();
  }
}
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();
       this.target.HappyMarry();//真实对象调用结婚
       after();
  }

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

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

Lambda表达式

  • 避免匿名内部类定义过多

  • 其实质属于函数式编程的概念

Functional Interface(函数式接口):

  • 任何接口,如果只包含唯一一个抽象方法,那么他就是一个函数式接口

  • 对于函数式接口,我们可以通过lambda表达式来创建该接口

package com.lambda;
/*
推导lambda表达式
*/
public class TestLambda1 {

   //3.静态内部类
   static class Like2 implements ILike{

       @Override
       public void lambda() {
           System.out.println("i like lambda2");
      }
  }

   public static void main(String[] args) {
       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.lambda;

public class TestLambda2 {

   public static void main(String[] args) {
       //lambda表达式简化
       ILove love = (int a) ->{
           System.out.println("i love you--->"+a);
      };

       //简化1 去掉参数类型
       love = (a) ->{
           System.out.println("i love you--->"+a);
      };
       //简化2 去掉括号
       love = a ->{
           System.out.println("i love you--->"+a);
      };
       //简化3 去掉花括号
       love = a -> System.out.println("i love you--->"+a);
       love.love(521);
  }
}
interface ILove{
   void love(int a);
}

       

总结:

  1. 前提是接口为函数式接口(只有一个方法)

  2. lambda表达式只有在一行的情况下才可以简化花括号

  3. 多个参数也可以去掉参数类型,要去掉都去掉,必须加括号,参数类型不同也可以去掉

posted @ 2021-04-30 20:03  卧剑之鱼  阅读(73)  评论(0)    收藏  举报