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
*/
Java_静态代理与Lambda的更多相关文章
- 多线程的创建,并发,静态代理,Lambda表达式
程序是指令和数据的有序集合,本身没有任何运行的含义.是一个静态的概念. 在操作系统中运行的程序就是进程(Process),如:QQ,播放器,游戏等等. 进程是程序的一次执行过程,是一个动态的概念,是系 ...
- java的线程、创建线程的 3 种方式、静态代理模式、Lambda表达式简化线程
0.介绍 线程:多个任务同时进行,看似多任务同时进行,但实际上一个时间点上我们大脑还是只在做一件事情.程序也是如此,除非多核cpu,不然一个cpu里,在一个时间点里还是只在做一件事,不过速度很快的切换 ...
- 第40天学习打卡(静态代理 Lambda表达式 线程状态 线程同步 同步方法)
静态代理 package com.kuang.demo03; //静态代理模式总结 //真实对象和代理对象都要实现同一个接口 //代理对象要代理真实角色 //好处: //代理对象可以做很多真实对象 ...
- [19/04/06-星期六] 多线程_静态代理(StaticProxy)和 lamda (简化代码,jdk8新增)
一.静态代理 [代码示例] /*** * 静态代理:记录日志等,类是写好的,直接拿来用. 动态代理:随用随构建,临时抱佛脚 * 婚庆公司:代理角色,帮你搞婚庆的一切,布置房间等等 * 自己:真实角色, ...
- 静态代理和利用反射形成的动态代理(JDK动态代理)
代理模式 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 静态代理 1.新建 ...
- 静态代理&动态代理
原文地址:http://blog.csdn.net/partner4java/article/details/7048879 静态AOP和动态AOP. 静态代理: 代理对象与被代理对象必须实现同一个接 ...
- spring静态代理
一.代理概念 为某个对象提供一个代理,以控制对这个对象的访问. 代理类和委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代.代理类负责请求的预处理.过滤.将请求分派给委托类 ...
- java静态代理与动态代理
原文链接:http://www.orlion.ga/207/ 一.代理模式 代理模式是经常用到的设计模式,代理模式是给指定对象提供代理对象.由代理对象来控制具体对象的引用. 代理模式涉及到的角色: 抽 ...
- JAVA静态代理模式(从现实生活角度理解代码原理)
代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问. 代理模式说白了就是"真实对象"的代表,在访问对象时引入一定程度的间接性,因为这种间接性可以附加多种用途. 在 ...
随机推荐
- 093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 03 static关键字(下)
093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 025 01 Android 零基础入门 01 Java基础语法 03 Java运算符 05 if条件结构
025 01 Android 零基础入门 01 Java基础语法 03 Java运算符 05 if条件结构 本文知识点:Java中的if条件结构语句 关系运算符回顾 生活中根据条件进行判断采取不同操作 ...
- 利用 JS 脚本实现网页全自动秒杀抢购
利用 JS 脚本实现网页全自动秒杀抢购 倒计时页面: 倒计时未结束时,购买按钮还不能点击. 结束时,可以点击购买,点击后出现提示"付款成功" 展示效果 1.制作测试网页 首先我们来 ...
- hasura的golang反向代理
概述 反向代理代码 对请求的处理 对返回值的处理 遇到的问题 概述 一直在寻找一个好用的 graphql 服务, 之前使用比较多的是 prisma, 但是 prisma1 很久不再维护了, 而 pri ...
- golang不想http自动处理重定向的解决方案
目录 前言 解决方案 结论 前言 有时候发送http请求不想让库自动帮忙处理重定向,库里面默认的是会把所有重定向都完成一遍,结果就是最后一个没有重定向的请求的结果.因此需要一种方案直接获取首次 ...
- Node.js安装及环境配置 for winer
Node.js安装及环境for Windows 一.安装环境 1.本机系统:Windows 10 Pro(64位) 2.Node.js:v6.9.2LTS(64位) 二.安装Node.js步骤 1.下 ...
- Python数据类型--集合(set)
Python的集合是无序.可迭代的容器对象,所有元素放在一对大括号中{},元素之间使用逗号隔开,同一集合内的元素具有唯一性,不允许重复. 集合中只能包含数字.字符串.元组等不可变类型的数据,不能包含列 ...
- 小试牛刀-hello,world!(第一个程序)
1.打开python的IDLE,启动Python解释器(按键盘的windows键,然后输入IDLE),在提示符下>>>输入命令:print("hello,world!&qu ...
- 福州11911.562(薇)xiaojie:福州哪里有xiaomei
福州哪里有小姐服务大保健[微信:11911.562倩儿小妹[福州叫小姐服务√o服务微信:11911.562倩儿小妹[福州叫小姐服务][十微信:11911.562倩儿小妹][福州叫小姐包夜服务][十微信 ...
- Windows下使用GitStack搭建Git服务器
Win10下使用GitStack搭建Git服务器 Git是目前世界上最先进的分布式版本控制系统(没有之一). 许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别. ...