当前位置: 首页 > news >正文

【设计模式】 外观模式

系列文章目录


文章目录

  • 系列文章目录
    • 股民炒股代码
    • 投资基金代码
    • 外观模式
    • 何时使用外观模式
  • 总结


在这里插入图片描述

本篇文章我们以股民炒股这一事件为例,下面我们来看第一版代码

股民炒股代码

  class Stock1{public void sell(){System.out.println("股票1卖出");}public void buy(){System.out.println("股票1买入");}}class Stock2{public void sell(){System.out.println("股票2卖出");}public void buy(){System.out.println("股票2买入");}}class NationalDebt1{public void sell(){System.out.println("国债1卖出");}public class buy(){System.out.println("国债1买入");}}//房地产类class Realty1{public void sell(){System.out.println("房地产1卖出");}public void buy(){System.out.println("房地产1买入");}}public static void main(String[] args) {Stock1 stock1 = new Stock1();Stock1 stock2 = new Stock2();NationalDebt1 nationalDebt1 = new NationalDebt1();Realty1 realty1 = new Realty1();stock1.buy();stock2.buy();nationalDebt1.buy();realty1.buy();stock1.sell();stock2.sell();nationalDebt1.sell();realty1.sell();}

如果我们是投资基金的话,那么就是将我们的钱交给基金来去炒股,此时有第二版代码投资基金代码。

投资基金代码

基金代码如下

 //基金类如下class Fund{Stock1 stock1;Stock2 stock2;NationalDebt1 nationalDebt1;Realty1 realty1;public Fund(){stock1 = new Stock1();stock2 = new Stock2();nationalDebt1 = new NationalDebt1();realty1 = new Realty1();}public void buyFund(){stock1.buy();stock2.buy();nationalDebt1.buy();realty1.buy();}public void sellFund(){stock1.sell();stock2.sell();nationalDebt1.sell();realty1.sell();}//基金类可以有很多买入卖出操作,持仓比例等//这里无须告知客户}//客户端public static void main(String[] args){Fund fund1 = new Fund();//基金购买fund1.buyFund();//基金赎回fund1.sellFund();}

外观模式

外观模式,为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

下面是外观模式的代码示例:

//子系统1class SubSystemOne{public void methodOne(){System.out.println("子系统方法一");}}//子系统2class SubSystemTwo{public void methodTwo(){System.out.println("子系统方法二");}}//子系统三class SubSystemThree{public void methodThree(){System.out.println("子系统方法三");}}//子系统四class SubSystemFour{public void methodFour(){System.out.println("子系统方法四");}}//外观类class Facade{SubSystemOne one;SubSystemTwo two;SubSystemThree three;SubSystemFour four;public Facade(){one = new SubSystemOne();two = new SubSystemTwo();three = new SubSystemThree();four = new SubSystemFour();}public void methodA(){one.methodOne();;two.methodTwo();three.methodThree();four.methodFour();}public void methodB(){two.methodTwo();three.methodThree();}}//客户端调用public static void main(String[] args) {Facade facade = new Facade();// 由于Facade的作用,客户端可以根本不知道其他四个子系统类的作用facade.methodA();facade.methodB();}

何时使用外观模式

对于何时使用外观模式,我们要分三个阶段来说

首先,在设计初期阶段,就应该要有意识地将不同的两个层分离, 比如经典的三层架构,就需要考虑在数据访问层和业务逻辑层、业务逻辑层和表示层的层与层之间建立外观Facade,这样可以为复杂的子系统提供一个简单的接口,使得耦合大大降低,其次,在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂, 大多数的模式使用时也都会产生很多很小的类,这本是好事,但也给外部调用他们的用户程序带来了使用上的困难,增加外观Facade可以提供一个简单的接口,减少他们之间的依赖。第三,在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了, 但因为他包含非常重要的功能,新的需求开发必须要依赖于它,此时用外观模式Facade也是非常合适的,我们可以为新系统开发一个外观类Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统于Facade对象交互,Facade与遗留代码交互所有复杂的工作。

总结

以上就是本文全部内容,本文主要向大家介绍了设计模式中的外观模式,通过炒股代码更改为基金类代码,来引出外观模式代码的大致模板。感谢各位能够看到最后,如有问题,欢迎各位大佬在评论区指正,希望大家可以有所收获!创作不易,希望大家多多支持!


文章转载自:

http://6q9SSwlT.Ljwyc.cn
http://wPjn6mPP.Ljwyc.cn
http://10Nwfuv3.Ljwyc.cn
http://WsRJQyDT.Ljwyc.cn
http://WKVKwkPB.Ljwyc.cn
http://liZer6kD.Ljwyc.cn
http://VKRVPeBv.Ljwyc.cn
http://AQb0YlsZ.Ljwyc.cn
http://MBI3VXcG.Ljwyc.cn
http://mhveSneu.Ljwyc.cn
http://A4Y1aXdm.Ljwyc.cn
http://GKQqrvcj.Ljwyc.cn
http://GAaXmTwP.Ljwyc.cn
http://uM1621TO.Ljwyc.cn
http://U5ol0t7x.Ljwyc.cn
http://PStanDgP.Ljwyc.cn
http://JXmYFhSA.Ljwyc.cn
http://jiwnQjqQ.Ljwyc.cn
http://rgYr21qr.Ljwyc.cn
http://CANZ8qxj.Ljwyc.cn
http://P5KsWbDs.Ljwyc.cn
http://a8mw5ZoB.Ljwyc.cn
http://eGTjfQjk.Ljwyc.cn
http://kQQpBbJz.Ljwyc.cn
http://ASDSxMOK.Ljwyc.cn
http://na6ktYUC.Ljwyc.cn
http://oo2uL3wX.Ljwyc.cn
http://Kf4AlQIm.Ljwyc.cn
http://3ZvO1OSu.Ljwyc.cn
http://hvMuGIyY.Ljwyc.cn
http://www.dtcms.com/a/374447.html

相关文章:

  • 在 JavaScript中使用msgpack-lite 和zlib实现大数据文件的压缩和读取
  • 医疗连续体机器人模块化控制界面设计与Python库应用研究(中)
  • 【数据库】Redis详解:内存数据库与缓存之王
  • OpenCV 图像处理实战:从图像金字塔到直方图分析
  • MongoDB 安全加固:构建企业级纵深防御体系——用户权限管理与 TLS 加密配置详解
  • 为什么苹果签名经常会掉签?
  • http basic认证流程
  • Docker 存储卷(Volume)核心概念、类型与操作指南
  • 【iOS】 单例模式
  • Matlab机器人工具箱使用4 蒙特卡洛法绘制工作区间
  • 【华为OD】环中最长子串2
  • 08 docker搭建大数据集群
  • 【华为OD】微服务的集成测试
  • Tool | UI/BI类网址收录
  • 计算机视觉(opencv)——基于模板匹配的身份证号识别系统
  • 腾讯推出AI CLI工具CodeBuddy,国内首家同时支持插件、IDE和CLI三种形态的AI编程工具厂商
  • 前后端联调时出现的一些问题记录
  • 网络编程;套接字;TCP通讯;UDP通讯;0909
  • 最后一公里文件传输难题Localsend+cpolar破解
  • Windows 命令行:cd 命令3,当前目录,父目录,根目录
  • 医疗连续体机器人模块化控制界面设计与Python库应用研究(下)
  • Nginx 优化与防盗链
  • Spring Web 异步响应实战:从 CompletableFuture 到 ResponseBodyEmitter 的全链路优化
  • Linux基础命令使用
  • 第二章、PyTorch 入门笔记:从张量基本操作到线性回归实战
  • 【参数详解与使用指南】PyTorch MNIST数据集加载
  • Ruoyi-vue-plus-5.x第六篇Web开发与前后端交互: 6.4 WebSocket实时通信
  • vlan(局部虚拟网)
  • MissionPlanner架构梳理之(十)-参数编辑器
  • Hadoop Windows客户端配置与实践指南