外观模式
-
定义:外观模式通过定义一个一致的接口,用以屏蔽内部子系统的细节,使得调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节。
-
优点:1) 外观模式对外屏蔽了子系统的细节,因此外观模式降低了客户端对子系统使用的复杂性。2) 外观模式对客户端与子系统的耦合关系,让子系统内部的模块更易维护和扩展。3) 通过合理的使用外观模式,可以帮我们更好的划分访问的层次。4) 当系统需要进行分层设计时,可以考虑使用Facade模式
-
缺点:不能过多的或者不合理的使用外观模式,使用外观模式好,还是直接调用模块好。要以让系统有层次,利于维护为目的。
-
与适配器模式的区别:适配器模式是将一个对象包装起来以改变其接口,而外观是将一群对象 ”包装“起来以简化其接口。它们的意图是不一样的,适配器是将接口转换为不同接口,而外观模式是提供一个统一的接口来简化接口。
-
博客:https://hanchao.blog.csdn.net/article/details/97616272
-
实例:瀑布模型软件开发场景:瀑布模型软件开发过程:制定计划、需求分析、软件设计、程序编写、软件测试和运行维护。
制定计划的主要执行者:产品经理。
需求分析的主要执行者:产品经理。
软件设计的主要执行者:开发经理。
程序编写的主要执行者:开发攻城狮,可能有多人。
软件测试的主要执行者:测试攻城狮,可能有多人。
运行维护的主要执行者:运维攻城狮,可能有多人。 -
类图:
/** * 外观类 */public class Project { /*** 项目名称*/ private String name; /*** 产品经理*/ private ProjectManager projectManager; /*** 开发经理*/ private DevelopManager developManager; /*** 开发攻城狮们*/ private ListDevelopmentEngineer> engineerList; /*** 测试攻城狮*/ private ListQualityAssurance> assuranceList; /*** 运维攻城狮*/ private ListOperations> operationsList; public Project(String name, ProjectManager projectManager, DevelopManager developManager, ListDevelopmentEngineer> engineerList, ListQualityAssurance> assuranceList, ListOperations> operationsList) {this.name = name;this.projectManager = projectManager;this.developManager = developManager;this.engineerList = engineerList;this.assuranceList = assuranceList;this.operationsList = operationsList; } /*** 开发过程*/ public void developProject() {System.out.println(this.name + " 项目启动...");System.out.println("-----------------------------");//指定计划projectManager.makeProjectPlan();//需求分析projectManager.analysisRequirement();//软件设计developManager.makeDevelopmentPlan();//程序编写engineerList.forEach(DevelopmentEngineer::develop);//软件测试assuranceList.forEach(QualityAssurance::test);//运行维护operationsList.forEach(Operations::operationAndMaintenance);System.out.println("-----------------------------");System
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!