百科生活 投稿
关于【lambda设计模式】,今天小编给您分享一下,如果对您有所帮助别忘了关注本站哦。
- 内容导航:
- 1、lambda设计模式:新玩法!用Lambda重构设计模式
- 2、lambda设计模式,探听AdMaster的Lambda架构实践
1、lambda设计模式:新玩法!用Lambda重构设计模式
关于设计模式
众所周知,设计模式是一群大佬程序员将对程序设计的经验归纳总结起来的方案。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。
本文不会对设计模式过度讲解,默认大家对设计模式有一定的了解(后面我会针对所有的设计模式单独进行讲解)
Lambda重构设计模式
接下来列举常用的几个设计模式,通过传统和lambda形式对比写法,让大家感受不一样的、Lambda版本的设计模式!
简单工厂模式
简单工厂模式因为内部方法常被定义为静态,所以又叫做静态工厂方法(Static Factory Method)模式,是由一个工厂对象通过客户端需要的类型创建出某个产品类的实例,简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
案例:水果工厂
包含橘子、香蕉、苹果
- 传统写法
public class FruitFactory { public static Fruit getFruit(String fruitName) { Fruit fruit = null; switch (fruitName) { case "Banana": fruit = new Banana(); break; case "Apple": fruit = new Apple(); break; } return fruit; }}
工厂模式的本质就是调用的时候返回一个对象,仔细回想一下,Java内置的函数式接口中Supplier似乎就是干这个事的,话不多说直接改写吧,
- lambda写法
public class FruitLambdaFactory { private static Map
题外话:上述写法其实存在瑕疵,比如:再新增一个水果品类,就必须改动工厂的静态方法,违背了开闭原则,而且通过传入字符串的形式也很容易导致拼错问题,实际业务中我们可以使用反射来解决这个问题。
- 反射写法
public class FruitReflectFactory { public static
策略模式
策略模式就是封装一系列算法,让这些算法之间可以在运行时相互替换,可以很好地解决过多使用if...else if...else的问题!
案例:多种发送信息的通道
包含:邮件通道、websocket通道
- 传统模式
public interface SendChannelStrategy { void send(String msg);}public class EmailChannelStrategy implements SendChannelStrategy{ @Override public void send(String msg) { System.out.println("使用email发送:" + msg); }}public class WebSocketChannelStrategy implements SendChannelStrategy{ @Override public void send(String msg) { System.out.println("使用websocket发送:" + msg); }}@AllArgsConstructor@Getter@Setterpublic class SendService { private SendChannelStrategy sendChannelStrategy; public void send(String msg) { sendChannelStrategy.send(msg); }}// 使用方式如下public void test(){ SendService sendService = new SendService(new EmailChannelStrategy()); sendService.send("卡诺"); // 使用email发送:卡诺 sendService.setSendChannelStrategy(new WebSocketChannelStrategy()); sendService.send("卡诺"); // 使用websocket发送:卡诺}
这里我们可以发现上面的策略模式接口其实是个函数式接口(只有一个抽象方法哦),方法拥有一个入参,无返回值,是不是一下子就想到了Java的内置函数式接口Consumer呢?下面我们就来看看Lambda的处理方式把!
- lambda写法
public void testLambda(){ SendService sendService = new SendService(msg -> System.out.println("使用lambda email发送:" + msg)); sendService.send("卡诺"); // 使用email发送:卡诺 sendService.setSendChannelStrategy(msg -> System.out.println("使用websocket发送:" + msg)); sendService.send("卡诺"); // 使用websocket发送:卡诺}
代码如所想,使用Consumer进行替换,我们可以直接省略掉EmailChannelStrategy和WebSocketChannelStrategy类的定义!
模版方法模式
模版方法模式指:父类定义好流程,允许子类实现流程中的一个或多个步骤。这样就可以保证整体流程不变的情况下,自己实现自己的个性化操作。
案例:游戏的过程
选择一个游戏的姿势玩(躺着/坐着)、开始游戏、游戏结束
2、lambda设计模式,探听AdMaster的Lambda架构实践
51CTO记者对即将参加大会演讲的AdMaster资深架构师刘喆先生行了专访,让我们先睹为快,探听AdMaster的Lambda架构实践方面的心得。
AdMaster简介:
AdMaster 精硕世纪科技(北京)有限公司是领先的营销数据技术公司,利用先进的大数据技术帮助品牌指导营销策略并预先量化营销效果。AdMaster架起了品牌、广告主与消费者之间的桥梁,是贯穿各行业和领域的数据枢纽。AdMaster实时日监测并分析来自数字电视、电脑、智能手机和平板电脑的线上广告曝光量数据高达50亿次。我们与国际、国内超百家媒体及上下游合作伙伴保持长期合作关系,保证了AdMaster作为数据枢纽的多方数据源对接和融合。
51CTO:在峰会现场你为何会选择《AdMaster的Lambda架构实践》这个演讲题目?
刘喆:总结近几年主要业务的一些需求, 以及我们对应的解决方案, 发现 Lambda 架构其实是非常适合业务需求的, 在系统稳定性/可扩展性/高效性等多方面满足了我们的需求. 我们也通过实践和趟坑, 完善了我们自己的Lambda 架构. 所以想给大家分享一下我们的实践, 跟大家交流.
51CTO:能给我们详细的介绍一下AdMaster 的 Lambda 架构技术的优势吗?
刘喆:Lambda 架构是一个大的思想和方案, 但是具体的落地和实践各有各的玩法, AdMaster 的 Lambda 架构在采用了开源界的 flume/kafka/spark/flink 等项目的同时, 加入了我们自己的改进和补充, 达到了查漏补缺和锦上添花的效果, 在稳定性/数据完整性/低时延/架构可扩展/业务可扩展 等等方面有我们自己的考虑和实践。
51CTO:有哪些优秀的AdMaster 的 Lambda 架构技术案例跟我们分享一下?
刘喆:一些案例包括:
1) Lambda 构架对高效准确的广告监测支持
2) Lambda 架构对高效丰富的广告投放支持
3) Lambda 架构对舆情分析的支持
51CTO:您如何看待WOT的?有哪些好的建议或者意见?
刘喆:WOT 我已经参加过几次, 感觉主办方非常用心, 真正地把前沿的技术带到会场, 让大家深入交流, 对于知识的传播起到了很好的促进作用, 参会者受益匪浅。
刘喆先生简介:
本文关键词:lambda架构,lambda架构的优点和缺点,lambda实现原理,lambda底层实现,lambda架构是什么意思。这就是关于《lambda设计模式,用Lambda重构设计模式》的所有内容,希望对您能有所帮助!
- 上一篇: 全部公主动画片,史上最全公主动画片
- 下一篇: 我国的九大商品粮基地是哪些,我国的九大商品粮基地的介绍
- 最近发表