淄博网站建设培训班中国建设通网站
web/
2025/10/5 4:06:54/
文章来源:
淄博网站建设培训班,中国建设通网站,什么是手机网站建设,宁波网站建设建站系统目录 1.概述2.结构3.实现3.1.子系统类3.2.外观类3.3.测试 4.优缺点5.使用场景6.源码解析 1.概述
#xff08;1#xff09;有些人可能炒过股票#xff0c;但其实大部分人都不太懂#xff0c;这种没有足够了解证券知识的情况下做股票是很容易亏钱的#xff0c;刚开始炒股肯… 目录 1.概述2.结构3.实现3.1.子系统类3.2.外观类3.3.测试 4.优缺点5.使用场景6.源码解析 1.概述
1有些人可能炒过股票但其实大部分人都不太懂这种没有足够了解证券知识的情况下做股票是很容易亏钱的刚开始炒股肯定都会想如果有个懂行的帮帮手就好其实基金就是个好帮手支付宝里就有许多的基金它将投资者分散的资金集中起来交由专业的经理人进行管理投资于股票、债券、外汇等领域而基金投资的收益归持有者所有管理机构收取一定比例的托管管理费用。
2外观模式 (Facade Pattern) 是一种结构型设计模式又称为门面模式它提供了一个统一的接口用于简化复杂系统或子系统的接口并将其封装成一个更高级别的接口。外观模式隐藏了系统的复杂性通过定义一个高层接口使得客户端与系统的交互更加简单和方便。此外外观模式是迪米特法则的典型应用。 2.结构
外观模式包含以下主要角色
外观 (Facade) 角色外观对象是客户端与子系统之间的中间层它封装了一组相关的子系统接口对客户端提供一个更简单、更高层次的接口。子系统 (Subsystem) 角色子系统是完成真正业务逻辑的组件它包含了一系列相互关联的类和方法。每个子系统都有自己的功能和职责但客户端可能不需要直接与子系统进行交互。
3.实现
【例】智能家电控制小明的爷爷已经 60 岁了一个人在家生活每次都需要打开灯、打开电视、打开空调睡觉时关闭灯、关闭电视、关闭空调操作起来都比较麻烦。所以小明给爷爷买了智能音箱可以通过语音直接控制这些智能家电的开启和关闭。类图如下 具体实现代码如下
3.1.子系统类
Light.java
public class Light {public void on(){System.out.println(打开电灯......);}public void off(){System.out.println(关闭电灯......);}
}TV.java
public class TV {public void on(){System.out.println(打开电视机......);}public void off(){System.out.println(关闭电视机......);}
}AirCondition.java
public class AirCondition {public void on(){System.out.println(打开空调......);}public void off(){System.out.println(关闭空调......);}
}3.2.外观类
SmartAppliancesFacade.java
//外观类用户主要和该类对象进行交互
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(我还听不懂你说的);}}//一件打开功能public void on() {light.on();tv.on();airCondition.on();}//一件关闭功能public void off() {light.off();;tv.off();airCondition.off();}
}3.3.测试
Client.java
public class Client {public static void main(String[] args) {//创建智能音箱对象SmartAppliancesFacade facade new SmartAppliancesFacade();//控制家电facade.on();System.out.println();//关闭家电facade.off();}
}输出结果如下
打开电灯......
打开电视机......
打开空调......关闭电灯......
关闭电视机......
关闭空调......4.优缺点
1外观模式有以下几个优点
简化客户端的调用通过外观对象提供的简单接口客户端可以更方便地与系统进行交互不需要了解系统的复杂性和内部结构。将客户端与子系统解耦外观模式将子系统封装起来客户端只需要与外观对象进行交互而不需要与各个子系统直接交互降低了客户端与子系统之间的耦合度。提高代码的可维护性通过将复杂的系统逻辑封装在外观对象中提升了代码的可读性和可维护性。修改系统时只需调整外观对象的接口而不需要修改客户端代码。提供统一的接口外观对象为系统的各个子系统定义了一个统一的接口使得系统更易于理解和使用。
2外观模式也有一些缺点
过度增加了一个新的抽象层外观模式引入了一个新的外观对象可能会导致系统中类的数量增加从而增加了系统的复杂性。不符合开闭原则当系统的功能发生变化时可能需要修改外观对象的接口这可能会影响到客户端代码。不能完全隐藏子系统的复杂性外观模式可以隐藏一部分子系统的复杂性但如果客户端需要直接访问子系统的一些细节就无法避免与子系统发生直接交互。
5.使用场景
1外观模式适用于以下情况
当需要简化复杂系统或子系统的接口时可以使用外观模式。例如一个系统包含多个子系统每个子系统有自己的接口但客户端可能不需要直接调用所有子系统的接口此时可以使用外观模式将这些子系统接口封装成一个更高层级的接口。当需要将系统与客户端分离并提高系统可维护性时可以使用外观模式。通过将系统的复杂性封装到外观对象中可以减少客户端代码与子系统之间的耦合并提高代码的可读性和可维护性。当需要对现有系统进行重构时可以使用外观模式。通过增加外观对象可以将系统的接口分层并提高代码的结构性从而使系统更加易维护。
2总之外观模式适用于需要简化系统接口、分离客户端与子系统之间的耦合度、提高代码可维护性以及改善系统的可用性和可理解性的情况。它是一个常用的结构型设计模式在实际开发中有着广泛的应用。
6.源码解析
1使用 Tomcat 作为 web 容器时接收浏览器发送过来的请求Tomcat 会将请求信息封装成 ServletRequest 对象如下图 ① 处对象。但是仔细想想 ServletRequest 是一个接口它还有一个子接口 HttpServletRequest而我们知道该 request 对象肯定是一个 HttpServletRequest 对象的子实现类对象到底是哪个类的对象呢可以通过输出 request 对象我们就会发现是一个名为 RequestFacade 的类的对象。 2RequestFacade 类就使用了外观模式。其结构图如下所示
3为什么在此处使用外观模式呢 定义 RequestFacade 类分别实现 ServletRequest 同时定义私有成员变量 Request 并且方法的实现调用 Request 的实现。然后将 RequestFacade上转为 ServletRequest 传给 servlet 的 service 方法这样即使在 servlet 中被下转为 RequestFacade 也不能访问私有成员变量对象中的方法。既用了 Request 又能防止其中方法被不合理的访问。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/87149.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!