建设银行纪念币预约网站,邢台人才招聘网,文学网站建设,创意矿泉水瓶子设计提示#xff1a;文章写完后#xff0c;目录可以自动生成#xff0c;如何生成可参考右边的帮助文档 学习的最大理由是想摆脱平庸#xff0c;早一天就多一份人生的精彩#xff1b;迟一天就多一天平庸的困扰。各位小伙伴#xff0c;如果您#xff1a; 想系统/深入学习某… 提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档 学习的最大理由是想摆脱平庸早一天就多一份人生的精彩迟一天就多一天平庸的困扰。各位小伙伴如果您 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持想组团高效学习… 想写博客但无从下手急需写作干货注入能量… 热爱写作愿意让自己成为更好的人… 文章目录 前言一、概述二、结构三、案例四、使用场景五、源码解析总结 前言
一、概述 二、结构 三、案例 四、使用场景 五、源码解析 一、概述
有些人可能炒过股票但其实大部分人都不太懂这种没有足够了解证券知识的情况下做股票是很容易亏钱的刚开始炒股肯定都会想如果有个懂行的帮帮手就好其实基金就是个好帮手支付宝里就有许多的基金它将投资者分散的资金集中起来交由专业的经理人进行管理投资于股票、债券、外汇等领域而基金投资的收益归持有者所有管理机构收取一定比例的托管管理费用。
定义
又名门面模式是一种通过为多个复杂的子系统提供一个一致的接口而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口外部应用程序不用关心内部子系统的具体的细节这样会大大降低应用程序的复杂度提高了程序的可维护性。
外观Facade模式是“迪米特法则”的典型应用
二、结构
外观Facade模式包含以下主要角色
外观Facade角色为多个子系统对外提供一个共同的接口。子系统Sub System角色实现系统的部分功能客户可以通过外观角色访问它。
三、案例
【例】智能家电控制
小明的爷爷已经60岁了一个人在家生活每次都需要打开灯、打开电视、打开空调睡觉时关闭灯、关闭电视、关闭空调操作起来都比较麻烦。所以小明给爷爷买了智能音箱可以通过语音直接控制这些智能家电的开启和关闭。类图如下 代码如下
//灯类
public class Light {public void on() {System.out.println(打开了灯....);}public void off() {System.out.println(关闭了灯....);}
}//电视类
public class TV {public void on() {System.out.println(打开了电视....);}public void off() {System.out.println(关闭了电视....);}
}//控制类
public class AirCondition {public void on() {System.out.println(打开了空调....);}public void off() {System.out.println(关闭了空调....);}
}//智能音箱
public class SmartAppliancesFacade {//聚合电灯、电视机、空调对象private Light light;private TV tv;private AirCondition airCondition;public SmartAppliancesFacade() {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 on() {System.out.println(起床了);light.on();tv.on();airCondition.on();}//睡觉一键关闭电器private void off() {System.out.println(睡觉了);light.off();tv.off();airCondition.off();}
}//测试类
public class Client {public static void main(String[] args) {//创建外观对象智能音箱SmartAppliancesFacade facade new SmartAppliancesFacade();//客户端直接与外观对象进行交互facade.say(打开家电);facade.say(关闭家电);}
}好处
降低了子系统与客户端之间的耦合度使得子系统的变化不会影响调用它的客户类。对客户屏蔽了子系统组件减少了客户处理的对象数目并使得子系统使用起来更加容易。
缺点
不符合开闭原则修改很麻烦
四、使用场景
对分层结构系统构建时使用外观模式定义子系统中每层的入口点可以简化子系统之间的依赖关系。当一个复杂系统的子系统很多时外观模式可以为系统设计一个简单的接口供外界访问。当客户端与多个子系统之间存在很大的联系时引入外观模式可将它们分离从而提高子系统的独立性和可移植性。
五、源码解析
使用tomcat作为web容器时接收浏览器发送过来的请求tomcat会将请求信息封装成ServletRequest对象如下图①处对象。但是大家想想ServletRequest是一个接口它还有一个子接口HttpServletRequest而我们知道该request对象肯定是一个HttpServletRequest对象的子实现类对象到底是哪个类的对象呢可以通过输出request对象我们就会发现是一个名为RequestFacade的类的对象。 RequestFacade类就使用了外观模式。先看结构图 为什么在此处使用外观模式呢
定义 RequestFacade 类分别实现 ServletRequest 同时定义私有成员变量 Request 并且方法的实现调用 Request 的实现。然后将 RequestFacade上转为 ServletRequest 传给 servlet 的 service 方法这样即使在 servlet 中被下转为 RequestFacade 也不能访问私有成员变量对象中的方法。既用了 Request 又能防止其中方法被不合理的访问。 总结
以上就是设计模式之外观模式【结构型模式】的相关知识点希望对你有所帮助。 积跬步以至千里积怠惰以至深渊。时代在这跟着你一起努力哦