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 */ ```