1. 程式人生 > >Java_靜態代理與Lambda

Java_靜態代理與Lambda

# 靜態代理 #

要點:    > 公共介面   > 真實角色   > 代理角色

``` public class StaticProxy {     public static void main(String[] args) {         You you = new You();         WeddingCompany com = new WeddingCompany(you);         com.happyMarry();                  System.out.println("####################");                  new WeddingCompany(new You()).happyMarry();

        //new Thread(執行緒物件).start();     }      }

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) {         super();         this.target = target;     }

    @Override     public void happyMarry() {         ready();         this.target.happyMarry();         after();     }          private void ready() {         System.out.println("待到秋來九月八");     }          private void after() {         System.out.println("沖天香陣透長安");     } }

/* 待到秋來九月八 我花開盡百花殺 沖天香陣透長安 #################### 待到秋來九月八 我花開盡百花殺 沖天香陣透長安 滿城盡帶黃金甲(這句是來湊數的) */ ```

# lambda #

使用lambda可避免匿名內部類定義過多   實質輸入函數語言程式設計的概念  

``` (params) -> expression (params) -> statement (params) -> {statements} ```

``` /***************匿名內部類與介面同名時*************/ /**  * 匿名內部類與介面同名  * @author Administrator  *  */ public class TestHaHa {

    public static void main(String[] args) {         ILike_1 like = new ILike_1() {             public void lambda() {                 System.out.println("I like lambda(匿名內部類).");             }         };             like.lambda();

        // 這個和介面同名匿名內部類必須實現介面中的方法, 否則報錯 //        ILike_1 like_1 = new ILike_1() { //            public void lambda_1() { //                System.out.println("I like lambda(匿名內部類)."); //            } //        };         }

}

interface ILike_1{     void lambda(); } /* I like lambda(匿名內部類). */ ```

``` /**************lambda無引數形式**************/ public class LambdaTest01 {     // 靜態內部類     static class Like2 implements ILike{         @Override         public void lambda() {             System.out.println("I like lambda(靜態內部類).");         }     }          public static void main(String[] args) {         ILike like = new Like();         like.lambda();                  like = new Like2();         like.lambda();                  class Like3 implements ILike{             @Override             public void lambda() {                 System.out.println("I like lambda(方法內部類).");             }         }         like = new Like3();         like.lambda();                  // 匿名內部類         like = new ILike() {             public void lambda() {                 System.out.println("I like lambda(匿名內部類).");             }         };         like.lambda();                  // lambda,          like = ()->{             System.out.println("I like lambda(lambda).");         };         like.lambda();                  /********lambda推到必須存在型別*****************         ()->{             System.out.println("I like lambda(lambda).");         };         like.lambda();         */     } }

interface ILike{     void lambda(); }

 // 外部類 class Like implements ILike{

    @Override     public void lambda() {         System.out.println("I like lambda(外部類).");     } }

/* I like lambda(外部類). I like lambda(靜態內部類). I like lambda(方法內部類). I like lambda(匿名內部類). I like lambda(lambda). */ ```

``` /************一個形參**************/ public class LambdaTest02 {          public static void main(String[] args) {         ILove love = (int a) -> {             System.out.println("I like lambda(外部類)---->" + a);         };         love.lambda(100);

        // 簡化         love = (a) -> {             System.out.println("I like lambda(外部類)---->" + a);         };         love.lambda(50);                  // 簡化, 只有一個引數時         love = a -> {             System.out.println("I like lambda(外部類)---->" + a);         };         love.lambda(5);                  // 簡化, 只有一行程式碼時, 多行程式碼不能簡化         love = a -> System.out.println("I like lambda(外部類)---->" + a);         love.lambda(0);     } }

interface ILove{     void lambda(int a); }

 // 外部類 class Love implements ILove{

    @Override     public void lambda(int a) {         System.out.println("I like lambda(外部類)---->" + a);     } }

/* I like lambda(外部類)---->100 I like lambda(外部類)---->50 I like lambda(外部類)---->5 I like lambda(外部類)---->0 */ ```

``` /************形參+返回值**************/ public class LambdaTest03 {     public static void main(String[] args) {         IInterest interest = (int a1, int b1) -> {             System.out.println("I like lambda(外部類)---->" + a1 + b1);             return a1 + b1;         };         System.out.println(interest.lambda(100, 200));

        // 簡化         interest = (a1, b1) -> {             System.out.println("I like lambda(外部類)---->" + a1 + b1);             return a1 + b1;         };         interest.lambda(100, 40);                  interest = (a, c) -> {return a + c;};

        interest = (a, c) -> a + c;

        interest = (a, c) -> 0;                  System.out.println(interest.lambda(10, 29));     } }

interface IInterest{     int lambda(int a, int b); }

 // 外部類 class Interest implements IInterest{

    @Override     public int lambda(int a1, int b1) {         System.out.println("I like lambda(外部類)---->" + a1 + b1);         return a1 + b1;     } }

/* I like lambda(外部類)---->100200 300 I like lambda(外部類)---->10040 0 */ ```

``` /*****************還能這麼玩*****************/ public class TestHaHa {

    public static void main(String[] args) {         ILike_1 like_1 = () -> {                 System.out.println("haha");         };                  like_1.haha();     }

}

interface ILike_1{     void haha(); }

/* haha */ ```

``` /************Thread + Lambda**************/ public class LambdaTest04 {     public static void main(String[] args) {         new Thread(()->{             System.out.println("學習lambda");         }).start();         new Thread(()->System.out.println("學習lambda")).start();     } }

/* 學習lambda 學習lambda */ ```