java多线程--2 静态代理、Lambda表达式
java多线程--2 静态代理、Lambda表达式
静态代理
package com.ssl.demo02;
//静态代理
//真实对象和代理对象都要实现同一个接口
//代理对象必须要代理真实角色
//好处
//代理对象可以做很多真实对象做不了的事情
//真实对象专注做自己的事情
public class StacticProxy {
public static void main(String[] args) {
You you = new You();
//Lamda表达式
new Thread(()-> System.out.println("我爱你")).start();
new WeddingCompany(new You()).HappyMarry();
/**相当于上面一行
WeddingCompany weddingCompany = new WeddingCompany(new You());
weddingCompany.HappyMarry();
*/
}
}
interface Marry{
/**人间四大喜事
* 久旱逢甘霖
* 他乡遇故知
* 洞房花烛夜
* 金榜题名时
*/
void HappyMarry();
}
//真实角色
class You implements Marry{
@Override
public void HappyMarry() {
System.out.println("happy");
}
}
//代理角色,帮You 结婚
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("结婚之前,布置现场");
}
}
Lamda表达式(JDK8新增)
- 希腊字母表中的第十一个字母,英文名称为Lambda
- 作用:
- 避免匿名内部类太多
- 可以让代码看起来更简洁
- 去掉了一对没有意义的代码,只留下核心逻辑
- 实质:属于函数式编程的概念
(params) ->expression[表达式] a -> System.out.println("i like lambda-->"+a);
(params) ->statement[语句]
(params) ->{statements}
关键:
函数式接口:
- 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口
- 对于函数式接口,我们可以通过lambda表达式来创建改接口的对象。
代码不断简化的过程 函数式接口
- 实现类->静态内部类->局部内部类->匿名内部类->Lanbda实现
无参案例
package com.ssl.demo02;
public class TestLambda {
//3.静态内部类
static class Like2 implements ILike{
@Override
public void lambda() {
System.out.println("I like lambda2");
}
}
public static void main(String[] args) {
//接口new了一个实现类
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.ssl.demo02;
public class TestLamvda2 {
//3.静态内部类
static class Love2 implements ILove{
@Override
public void love(int a) {
System.out.println("I love2 "+a);
}
}
public static void main(String[] args) {
ILove love = new Love();
love.love(1);
love = new Love2();
love.love(2);
//4.局部内部类
class Love3 implements ILove{
@Override
public void love(int a) {
System.out.println("I love3 "+a);
}
}
love = new Love3();
love.love(3);
//5.匿名内部类
love = new ILove() {
@Override
public void love(int a) {
System.out.println("I love4 "+a);
}
};
love.love(4);
//6.Lambda实现
love = (a) -> System.out.println("I love5 "+a);
love.love(5);
love = a -> System.out.println("I love6 "+a);
love.love(6);
/**总结
* 1.Lambda表达式只能有一行代码的情况下才能简化成为一行,如果有多行,那么就用代码块包裹。
* 2.前提是接口为函数式接口
* 3.多个参数可以去掉参数类型
* 4.多个参数必须加括号
*/
}
}
//1.定义接口
interface ILove{
void love(int a);
}
//2.实现类
class Love implements ILove{
@Override
public void love(int a) {
System.out.println("I love "+a);
}
}
java多线程--2 静态代理、Lambda表达式的更多相关文章
- 第40天学习打卡(静态代理 Lambda表达式 线程状态 线程同步 同步方法)
静态代理 package com.kuang.demo03; //静态代理模式总结 //真实对象和代理对象都要实现同一个接口 //代理对象要代理真实角色 //好处: //代理对象可以做很多真实对象 ...
- Java多线程之静态代理
package org.study2.javabase.ThreadsDemo.staticproxy; /** * @Date:2018-09-18 静态代理 设计模式 * 1.真实角色 * 2.代 ...
- 黑马程序员:Java基础总结----静态代理模式&动态代理
黑马程序员:Java基础总结 静态代理模式&动态代理 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 静态代理模式 public class Ts { ...
- Java中的静态代理实现方式
1.编写一个接口类 如:Subject package com.neusoft.pattern.staticProxy; /** * <p>Title:</p> * <p ...
- Java 终于在 Java 8 中引入了 Lambda 表达式。也称之为闭包或者匿名函数。
本文首发于 blog.zhaochunqi.com 转载请注明 blog.zhaochunqi.com 根据JSR 335, Java 终于在 Java 8 中引入了 Lambda 表达式.也称之为闭 ...
- [Java] 设计模式:代码形状 - lambda表达式的一个应用
[Java] 设计模式:代码形状 - lambda表达式的一个应用 Code Shape 模式 这里介绍一个模式:Code Shape.没听过,不要紧,我刚刚才起的名字. 作用 在应用程序的开发中,我 ...
- Effective Java 第三版——42.lambda表达式优于匿名类
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- Java之线程池和Lambda表达式
线程池和lambda表达式 学习线程池和lambda表达式的理解 补充一个知识点(单例设计模式) 在多线程中,我们只需要一个任务类,为了防止创建多个任务类,这个时候就需要用到单例模式,单例模式有两种设 ...
- [19/04/06-星期六] 多线程_静态代理(StaticProxy)和 lamda (简化代码,jdk8新增)
一.静态代理 [代码示例] /*** * 静态代理:记录日志等,类是写好的,直接拿来用. 动态代理:随用随构建,临时抱佛脚 * 婚庆公司:代理角色,帮你搞婚庆的一切,布置房间等等 * 自己:真实角色, ...
- java 8 学习二(Lambda表达式)
粗略的概括:lambda表达式主要用来实现“函数接口”中“唯一”的抽象方法用的. 他的特殊版有 方法引用,构造函数引用,用对应的接口实例接收即可. 可以把Lambda表达式理解为简洁地表示可传递的匿名 ...
随机推荐
- .NET CORE 下收发邮件之 MAILKIT
背景 利用代码发送邮件在工作中还是比较常见的,相信大家都用过SmtpClient来处理发送邮件的操作,不过这个类以及被标记已过时,所以介绍一个微软推荐的库MailKit来处理. MailKit开源地址 ...
- SQL----EXISTS 关键字EXISTS基本意思
1.EXISTS基本意思 英语解释就是存在,不过他的意思也差不多,相当于存在量词'З'.他不返回数据的,当后带带的查询为空值是,返回"FALSE",非空则返回"TRUE& ...
- Centos7编译Nginx1.19.0笔记
下载Nginx安装包 官网下载页:http://nginx.org/en/download.html 终端输入: # 安装依赖yum -y install wget gcc gcc-c++ autoc ...
- mysql安装及可视化界面
Mysql下载安装 官网下载链接 https://dev.mysql.com/downloads/mysql/ 可以选择之前的版本 我一开始下的8.0.21但安装的时候报错说找不到VCRUNTIME1 ...
- 零知识证明(Zero-Knowledge Proof)
零知识证明(Zero Knowledge Proof)指的是,证明的人可以向验证的人,在不透露任何有用信息的情况下,使得验证者相信该结论是对的. 三种零知识证明技术:zk-SNARKs, Zk-STA ...
- Element-ui框架Tree树形控件切换高亮显示选中效果
废话不多说,直接上代码 1 <template> 2 <div class="warpper"> 3 <el-tree ref=& ...
- Latex Algorithm 语法错误导致无法编译
遇到了几种情况: 1. for 循环没加{} 2. $\textbf{T_i}$, 想要加粗T,但是把i也扩进去了,latex就不懂了,于是一直recompile不出来说超时什么什么的,把i放到外面就 ...
- 使用python的turtle库画一个冰墩墩
目录 先看效果图 设置一个画布 画左手和手内 画轮廓和其他部分 画细节(眼睛.鼻子.嘴巴等) 画头部彩虹 画五环标志 最后(别忘记还有一个结束) 先看效果图 设置一个画布 点击查看代码 import ...
- C# 自定义控件如何正确的继承父类
C# 自定义控件可以分为三类: 复合控件:基本控件组合而成.应当继承自 UserControl 扩展控件:继承基本控件,扩展一些属性和事件.比如继承 Button 自定义控件:直接继承自 Contro ...
- 【vue】数据代理
Object.defineProperty()方法 我们先来看几段代码 常用添加属性的方法,以添加age举例 ,点击查看代码 let person = { name: '张三', sex: '男', ...