简介:为子系统中的一组接口提供一个统一的高层接口
目的:
总结:整合一组接口成一个接口
组成:被整合接口, 统一接口
1,被整合接口
package com.design.k.facade; /** * 子服务A */ public interface SubAService { void methodA(); }
package com.design.k.facade; /** * 子服务A */ public class SubAServiceImpl implements SubAService { @Override public void methodA() { System.out.println("子服务A - 方法A ... ... "); } }
package com.design.k.facade; /** * 子服务B */ public interface SubBService { void methodB(); }
package com.design.k.facade; /** * 子服务B */ public class SubBServiceImpl implements SubBService { @Override public void methodB() { System.out.println("子服务B - 方法B ... ... "); } }
package com.design.k.facade; /** * 子服务C */ public interface SubCService { void methodC(); }
package com.design.k.facade; /** * 子服务C */ public class SubCServiceImpl implements SubCService{ @Override public void methodC() { System.out.println("子服务C - 方法C ... ... "); } }
2,统一接口
package com.design.k.facade; /** * 外观模式 */ public interface FacadeService { /** * 外观模式 * * 将子服务进行任意组合通过外观模式提供统一的接口 */ void methodAB(); void methodBC(); void methodABC(); }
3,统一接口实现
package com.design.k.facade; public class FacadeServiceImpl implements FacadeService { //初始化子服务 private SubAService subAService; private SubBService subBService; private SubCService subCService; public FacadeServiceImpl() { super(); this.subAService = new SubAServiceImpl(); this.subBService = new SubBServiceImpl(); this.subCService = new SubCServiceImpl(); } public FacadeServiceImpl(SubAService subAService, SubBService subBService, SubCService subCService) { super(); this.subAService = subAService; this.subBService = subBService; this.subCService = subCService; } @Override public void methodAB() { subAService.methodA(); subBService.methodB(); } @Override public void methodBC() { subBService.methodB(); subCService.methodC(); } @Override public void methodABC() { subAService.methodA(); subBService.methodB(); subCService.methodC(); } }
4,Main
package com.design.k.facade; /** * 11-外观模式 * * 将多个服务做统一入口处理 */ public class MainTest { public static void main(String[] args) { /** * 外观模式 - 就是将子服务整合为统一入口 */ FacadeService facadeService = new FacadeServiceImpl(); facadeService.methodAB(); facadeService.methodBC(); facadeService.methodABC(); } }
5,Result
--------原始方法----开始------------------- 用户服务接口: 用户信息修改 。。。 。。。userId=1001 --------装饰器A----开始------------------- 装饰器A - 针对用户修改方法 - 添加的包装 - starting ... ... 用户服务接口: 用户信息修改 。。。 。。。userId=1001 装饰器A - 针对用户修改方法 - 添加的包装 - end ... ... 装饰器A - 针对用户服务 - 装饰的扩展方法 ... ... --------装饰器B----开始------------------- 装饰器B - 针对用户修改方法 - 添加的包装 - starting ... ... 用户服务接口: 用户信息修改 。。。 。。。userId=1001 装饰器B - 针对用户修改方法 - 添加的包装 - end ... ... 装饰器B - 针对用户服务 - 装饰的扩展方法 ... ... --------装饰器A && 装饰器B----开始------------------- 装饰器B - 针对用户修改方法 - 添加的包装 - starting ... ... 装饰器A - 针对用户修改方法 - 添加的包装 - starting ... ... 用户服务接口: 用户信息修改 。。。 。。。userId=1001 装饰器A - 针对用户修改方法 - 添加的包装 - end ... ... 装饰器B - 针对用户修改方法 - 添加的包装 - end ... ... 装饰器B - 针对用户服务 - 装饰的扩展方法 ... ...