总结:
真实对象和代理对象都要实现同一个接口
代理对象要代理真实角色(传递一个真实角色类型的实参)
好处:代理对象可以做很多真实对象做不了的事情
真实对象专注做自己的事情
实现方法类似多线程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("结婚之前,布置现场"); } } /* 结婚之前,布置现场 我要结婚了 结婚之后,收尾款 */
主要作用为简化程序,避免匿名内部类定义过多,去掉没有意义的代码,只留下核心的逻辑
函数式接口的定义:任何接口,若只包含唯一一个抽象方法,那么他就是函数式接口。
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*/
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 */