百度云自助建站,营销型网站制作哪家好,淇县住房和城乡建设局网站,用自己的名字设计logo1.概述
又名门面模式#xff0c;是一种通过为多个复杂的子系统提供一个一致的接口#xff0c;而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口#xff0c;外部应用程序不用关心内部子系统的具体的细节#xff0c;这样会大大降低应用程序的复杂度#xff0…1.概述
又名门面模式是一种通过为多个复杂的子系统提供一个一致的接口而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口外部应用程序不用关心内部子系统的具体的细节这样会大大降低应用程序的复杂度提高了程序的可维护性。
2.结构
外观Facade模式包含以下主要角色
外观Facade角色为多个子系统对外提供一个共同的接口。子系统Sub System角色实现系统的部分功能客户可以通过外观角色访问它。
3.案例
/*** author 晓风残月Lx* date 2023/7/12 14:19* 电灯类子系统*/
public class Light {public void on() {System.out.println(打开了灯......);}public void off() {System.out.println(关闭了灯.......);}
}
/*** author 晓风残月Lx* date 2023/7/12 14:22* 电视机类*/
public class TV {public void on() {System.out.println(打开了电视......);}public void off() {System.out.println(关闭了电视.......);}}
/*** author 晓风残月Lx* date 2023/7/12 14:19* 电灯类子系统*/
public class AirCondition {public void on() {System.out.println(打开了空调......);}public void off() {System.out.println(关闭了空调.......);}
} /*** author 晓风残月Lx* date 2023/7/12 14:21* 外观类用户主要和该类交互*/
public class SmartApplicationFacade {//聚合电灯对象电视机对象空调对象private Light light;private TV tv;private AirCondition airCondition;public SmartApplicationFacade() {light new Light();tv new TV();airCondition new AirCondition();}public void say(String message) {if (message.contains(打开)) {on();} else if (message.contains(关闭)) {off();} else {System.out.println(我还听不懂你说的);}}// 一键关闭private void off() {light.off();tv.off();airCondition.off();}// 一键打开private void on() {light.on();tv.on();airCondition.on();}}
/*** author 晓风残月Lx* date 2023/7/12 14:38*/
public class Client {public static void main(String[] args) {// 创建智能音箱对象SmartApplicationFacade smartApplicationFacade new SmartApplicationFacade();// 控制家电smartApplicationFacade.say(打开家电);// 关闭家电smartApplicationFacade.say(关闭家电);}
}
4.优缺点
好处
降低了子系统与客户端之间的耦合度使得子系统的变化不会影响调用它的客户类。对客户屏蔽了子系统组件减少了客户处理的对象数目并使得子系统使用起来更加容易。
缺点
不符合开闭原则修改很麻烦
5.使用场景
对分层结构系统构建时使用外观模式定义子系统中每层的入口点可以简化子系统之间的依赖关系。当一个复杂系统的子系统很多时外观模式可以为系统设计一个简单的接口供外界访问。当客户端与多个子系统之间存在很大的联系时引入外观模式可将它们分离从而提高子系统的独立性和可移植性。