java8提供了很多新的特性,可以用来重构传统设计模式中的写法。下面是一些例子:1.策略模式上图是策略模式的类图。假设我们现在要保存订单,OrderService接口定义了Whattodo,而NoSqlSaveOrderStragegy和MySqlSaveOrderStrategy提供了两种策略,保存到nosql数据库和传统的mysql关系数据库,最后注入最终要用到的策略OrderServiceExecutor通过构造函数。传统写法,这个场景至少需要4个类,代码如下:OrderService接口:publicinterfaceOrderService{voidsaveOrder(StringorderNo);}orderNo){System.out.println("订单:"+orderNo+"保存到mysql");}}Nosql策略实现:publicclassNoSqlSaveOrderStrategyimplementsOrderService{@OverridepublicvoidsaveOrder(StringorderNo){System.out.println("order:"+orderNo+"savetonosql");}}辅助“容器”使用策略:publicclassOrderServiceExecutor{privatefinalOrderServiceservice;publicOrderServiceExecutor(OrderServiceservice){this.service=service;}publicvoidsave(StringorderNo){this.service.saveOrder(orderNo);}}运行测试类:公共类OrderServiceTest{publicstaticvoidmain(String[]args){执行器1.save("001");OrderServiceExecutorexecutor2=newOrderServiceExecutor(newNoSqlSaveOrderStrategy());executor2.save("002");}}重构后可以省去2个策略实现类,代码如下::"+orderNo+"保存到mysql"));executor1.save("001");OrderServiceExecutorexecutor2=newOrderServiceExecutor((StringorderNo)->System.out.println("order:"+orderNo+"保存到nosql"));executor2.save("002");}2.模板方法类图如下,核心思想是在抽象父类中定义一些常用的标准方法,只定义方法签名,实现逻辑交给子类。例如:在会员系统中,每个商家都会有一些营销活动,需要向会员推送一定的信息,但是不同的商家推送的内容可能会有所不同。有的需要推送优惠券,有的需要积分通知。抽象模板类:publicabstractclassAbstractPushTemplate{publicvoidpush(intcustomerId,StringshopName){System.out.println("Readytopush...");执行(客户编号,商店名称);System.out.println("推送完成\n");}abstractprotectedvoidexecute(intcustomerId,StringshopName);}优惠券特定模板;publicclassPushCouponTemplateextendsAbstractPushTemplate{@Overrideprotectedvoidexecute(intcustomerId,StringshopName){System.out.println("Member:"+customerId+",你好,"+shopName+"送你一张优惠券");}}点具体模板;publicclassPushScoreTemplateextendsAbstractPushTemplate{@Overrideprotectedvoidexecute(intcustomerId,StringshopName){System.out.println("Member:"+customerId+",hello,"+shopName+"送你10分");}}使用示例:AbstractPushTemplatetemplate1=newPushCouponTemplate();template1.push(1,"糖果店");AbstractPushTemplatetemplate2=newPushScoreTemplate();template2.push(1,"服装店");显然,实现的模板越多,子类就越多。用java8重构后,以上3个模板(包括抽象类模板)可以减少为1个,参考如下:publicclassPushTemplateLambda{publicvoidpush(intcustomerId,StringshopName,Consumer