优点:
松散耦合,外观模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护。
单易用,外观模式让子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行交互,只需要跟门面类交互就可以了。
更好的划分访问层次-通过合理使用 Facade,可以帮助我们更好地划分访问的层次。有些方法是对系统外的,有些方法是系统内部使用的。把需要暴露给外部的功能集中到门面中,这样既方便客户端使用,也很好地隐藏了内部的细节。
缺点:
package com.lw.designpattern.facade; /** * @Classname BcCar * @Description 奔驰车 * @Author lw * @Date 2019-12-28 09:00 */ public class BcCar { public void showCar(){ System.out.println("奔驰E300L展览。。。。。。"); } }
package com.lw.designpattern.facade; /** * @Classname BmwCar * @Description 宝马车 * @Author lw * @Date 2019-12-28 09:00 */ public class BmwCar { public void showCar(){ System.out.println("宝马530Li展览。。。。。。"); } }
package com.lw.designpattern.facade; /** * @Classname AudiCar * @Description 奥迪车 * @Author lw * @Date 2019-12-28 09:00 */ public class AudiCar { public void showCar(){ System.out.println("奥迪A6L展览。。。。。。"); } }
package com.lw.designpattern.facade; /** * @Classname ShowCarFacade * @Description 展览车门面接口 * @Author lw * @Date 2019-12-28 09:14 */ public interface ShowCarFacade { /** * 展示汽车类型A类 */ public void showCarTypeA(); /** * 展示汽车类型B类 */ public void showCarTypeB(); /** * 展示汽车类型C类 */ public void showCarTypeC(); }
package com.lw.designpattern.facade; /** * @Classname ShowCarFacade * @Description 展览车门面接口实现类 * @Author lw * @Date 2019-12-28 08:59 */ public class ShowCarFacadeImpl implements ShowCarFacade { private BcCar bcCar; private BmwCar bmwCar; private AudiCar audiCar; public ShowCarFacadeImpl(){ bcCar = new BcCar(); bmwCar = new BmwCar(); audiCar = new AudiCar(); } /** * 展示奔驰车 */ @Override public void showCarTypeA() { bcCar.showCar(); } /** * 展示奔驰车和宝马车 */ @Override public void showCarTypeB() { bcCar.showCar(); bmwCar.showCar(); } /** * 展示奔驰车、宝马车和奥迪车 */ @Override public void showCarTypeC() { bcCar.showCar(); bmwCar.showCar(); audiCar.showCar(); } }
/** * 外观模式 */ @Test public void testFacade(){ // 创建门面对象 ShowCarFacade showCarFacade = new ShowCarFacadeImpl(); // 展示汽车A类 showCarFacade.showCarTypeA(); System.out.println("============"); // 展示汽车B类 showCarFacade.showCarTypeB(); System.out.println("============"); // 展示汽车C类 showCarFacade.showCarTypeC(); }
打印结果
原文:https://www.cnblogs.com/lwcode6/p/12110800.html