最新要闻
- 全球焦点!平价神器!新iPad mini 7曝光:处理器/屏幕惊喜
- 女子买电影票发现仅一个普通座位 其他全是C位 工作人员也无语
- 每日短讯:他真的很忙!雷军站公司门口给小米员工挨个发红包
- 最资讯丨打工人热议今天怎么才是周一:专家科普节后综合征
- 【全球热闻】《无名》折戟春节档:4.9亿票房只排第4、粉黑大战尴尬
- 【全球速看料】亏电油耗不到5升 长安UNI-V iDD将于3月上市:或15万起售
- 要闻:《流浪地球2》有多硬核?工业机器人登上大银幕 周边产品也火了 超额数百倍
- 神操作 外卖小哥为闯红灯S形走位 被罚20元
- 当前快报:3.3万元!雷神ZERO 2023上架:搭载RTX 4090和i9-13900HX
- 【当前独家】女子被石头鱼刺伤整条胳膊肿胀 医生提醒:高档海鲜 鳍有剧毒
- 光线传媒回应股价暴跌:节前涨过一波 公司主投的《深海》票房不及预期
- 世界观天下!庆祝中国新年!梅西东家巴黎全队球员身穿中文球衣出战
- 焦点速读:4人修改游戏源代码 架设私服 2年牟利260余万元
- 全球实时:因堵车错过高速免费时段要缴1000多过路费 有司机不干了:网友支招
- 世界热头条丨郭明錤:苹果或明年推出折叠屏iPad 配备碳纤维支架
- 焦点信息:ChatGPT很厉害 但还有关键问题悬而未决
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
Java中23种设计模式介绍和应用场景总结
(相关资料图)
目录- 设计原则
- 设计模式
- GOF四人帮
- 23种设计模式关系
- 创建型模式
- 结构型模式
- 行为型模式
- 23种设计模式应用场景
- 创建型模式应用
- 结构型模式应用
- 行为型模式应用
- JAVA中设计模式使用场景总结
- 创建型
- 行为型
- 结构型
设计原则
23种设计模式满足并实现了设计原则中的一个或者多个,从而达到了代码复用、增加可维护性的目的。
- 开闭原则(Open+Closed+Principle,OCP)
- 里氏代换原则(Liskov+Substitution+Principle,LSP)
- 依赖倒转原则(Dependency+Inversion+Principle,DIP)
- 接口隔离原则(Interface+Segregation+Principle,ISP)
- 合成/聚合复用原则(Composite%2FAggregate+Reuse+Principle,CARP)
- 最小知识原则(Principle+of+Least+Knowledge,PLK,也叫迪米特法则)
设计模式
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。
GOF四人帮
在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名为 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素) 的书,该书首次提到了软件开发中设计模式的概念。
四位作者合称 GOF(四人帮,全拼 Gang of Four)。他们所提出的设计模式主要是基于以下的面向对象设计原则。
- 对接口编程而不是对实现编程。
- 优先使用对象组合而不是继承。
23种设计模式关系
23种设计模式关系图
创建型模式
- 工厂方法模式
- 抽象工厂模式
- 单例模式
- 建造者模式
- 原型模式
结构型模式
- 适配器模式
- 装饰器模式
- 代理模式
- 外观模式
- 桥接模式
- 组合模式
- 享元模式
行为型模式
- 策略模式
- 模板方法模式
- 观察者模式
- 迭代子模式
- 责任链模式
- 命令模式
- 备忘录模式
- 状态模式
- 访问者模式
- 中介者模式
- 解释器模式
23种设计模式应用场景
创建型模式应用
- 工厂方法模式(Factory):工厂创建对象(经典实现:很多框架初始化时都会创建一个工厂对象,用来加载资源)
- 抽象工厂模式(Abstractfactory):抽象工厂实例创建对象,工厂可修改,灵活度高(经典实现:Struts2插件机制的核心实现就是BeanFactory这个抽象工厂。Spring IOC加载Bean,AOP创建Proxy)
- 单例模式(Sington):适用于只需要一个对象的情况(经典实现:Tomcat中StringManager的错误处理机制)
- 建造者模式(Builder):一步一步创建一个复杂的对象(经典实现:MyBatis中的SQLSession就是结合了Configure,executor等对象,以此来实现SQLSession的复杂功能)
- 原型模式(Prototype):复制对象,包括深度复制和浅度复制,深度复制重建引用对象,浅度复制不创建(经典实现:java序列化)
结构型模式应用
- 适配器模式(Adapter):通过实现接口,依赖注入,继承等方式为不相关的实体建立关系(经典实现:Tomcat新版本连接器Coyote,就是通过为Connector适配建立了ProtocolHandler与Tomcat组件Connector的关联关系、JDK SET集合)
- 装饰器模式(Decorator):创建包装对象修饰扩展被包装对象的功能(经典实现:JDK IO家族中BufferedXxx)
- 代理模式(Proxy):通过添加中间代理的方式限制,过滤,修改被代理类的某些行为(经典实现:Spring AOP核心实现,DataSource中为Connection创建代理对象,改变close方法的行为,使其从开始的关闭连接变成将连接还回连接池)
- 外观模式(Facade):通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象。(经典实现:Tomcat中创建外观类包装StandardContext传给Wrapper,创建外观类包装Wrapper以ServletConfiguration的形式传给Servlet,以此来屏蔽不想让Servlet可见的那些Tomcat容器参数)
- 桥接模式(Bridge):将抽象部分与它的实现部分分离,使它们都可以独立地变化(经典实现:JDBC驱动)
- 组合模式(Composite):部分与整体,常用于表示树形结构
- 享元模式(Flyweight):维护资源集合(经典实现:数据库连接池,避免重新开启数据库链接的开销)
行为型模式应用
- 策略模式(Strategy):定义多个不同的实现类,这些类实现公共接口,通过调用接口调用不同实例得到不同结果(经典实现:Spring中Bean的定义与注入,Controller,Servcie,repository三层架构中只依赖上一层接口)
- 模板方法模式(Template):父类定义公共方法,不同子类重写父类抽象方法,得到不同结果(经典实现:Tomcat生命周期中的init,SpringIOC上层类加载具体子类指定的配置文件、SpringData XXTemplate、JDK AQS同步器)
- 观察者模式(Observer):目标方法被调用,通知所有观察者(经典实现:Tomcat生命周期事件监听,Spring BeanPostProcessor实现 )
- 迭代子模式(Interator):提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。(经典实现:JDK Iterator集合迭代器)
- 责任链模式(ChainOfResponsibility):链式依赖,依次调用(经典实现:Tomcat Valve)
- 命令模式(Commond):Action定义具体命令,拦截器Invocation回调执行命令(经典实现:Struts2)
- 备忘录模式(Memento):建立原始对象副本,用于存储恢复原始对象数据
- 状态模式(Stage):通过改变状态,改变行为(经典实现:切换装载着不同配置信息的配置文件对象)
- 访问者模式(Visitor):结构与操作解耦。灵活的操作,放入固定的结构中执行(经典实现:在SpringAOP的实现过程中首先会有一个ProxyCreator去创建切入点,通知之类的,然后创建一个抽象工厂将这些参数对象传递给抽象工厂,抽象工厂调用createAopProxy(this)来创建对象,传入不同的抽象工厂创建出不同的实体对象)
- 中介者模式(Mediator):**MVC **框架,其中C(控制器)就是 M(模型)和 V(视图)的中介者
- 解释器模式(Iterpreter):定义分别定义 + - * / 非终结符,组合不同的非终结符定义不同的表达式,维护繁琐
JAVA中设计模式使用场景总结
设计模式的使用好坏很考验一个开发人员的编码能力深度,使用不当则会造成过度设计,增加维护成本。使用错误,则会造成设计重构,增加开发时间成本。所以使用设计模式,一定要知其大意并明其深意。23种设计模式在提出时,就分为了三大类,根据不同的类型应用到不同的业务场景中,使用得当才能更好的应用设计模式。下面简单总结了一下三种设计模式的应用场景
创建型
创建某个或者某些或者某类对象使用,考虑使用创建型设计模式,这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。
行为型
对象的行为交互(方法调用/回调)功能需要设计,考虑使用行为型设计模式, 这些设计模式特别关注对象之间的通信。
结构型
对象和类之间的关系组合,复杂的设计或许能够支撑业务的扩展,但维护成本大大增加。简单的设计或许能够节约开发成本,但是面对业务的徒增,扩展性太差。考虑类和对象之间的组合关系使用结构型设计模式或许能够解决问题,这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。
-
今头条!手机测试之-adb
一、AndroidDebugBridge1 1Android系统主要的目录1 2ADB工具介绍ADB的全称为AndroidDebugBridge,就是起到调试桥的作用,是Androi
来源: -
DevOps: 自动与手动部署语义化版本(Semantic Versioning)实操
本文将向您展示如何使用Buddy的流水线在任何Git存储仓中自动增加应用程序的版本。我们即将创建的流水线...
来源: Java中23种设计模式介绍和应用场景总结
今头条!手机测试之-adb
环球时讯:《鹅鸭杀》爆火,一文带你了解如何实现顶流社交游戏
DevOps: 自动与手动部署语义化版本(Semantic Versioning)实操
焦点信息:手上有了这些工具,明天争取6点下班了!
全球焦点!平价神器!新iPad mini 7曝光:处理器/屏幕惊喜
女子买电影票发现仅一个普通座位 其他全是C位 工作人员也无语
每日短讯:他真的很忙!雷军站公司门口给小米员工挨个发红包
最资讯丨打工人热议今天怎么才是周一:专家科普节后综合征
【全球热闻】《无名》折戟春节档:4.9亿票房只排第4、粉黑大战尴尬
springboot整合activiti实现流程审批(支持单体、微服务融合)
环球百事通!FPGA用ROM输出正弦波
深度学习基础课:卷积层的梯度检查
Dockerfile构建镜像
每日信息:SSL 证书基本概念扫盲
【全球速看料】亏电油耗不到5升 长安UNI-V iDD将于3月上市:或15万起售
要闻:《流浪地球2》有多硬核?工业机器人登上大银幕 周边产品也火了 超额数百倍
神操作 外卖小哥为闯红灯S形走位 被罚20元
当前快报:3.3万元!雷神ZERO 2023上架:搭载RTX 4090和i9-13900HX
【当前独家】女子被石头鱼刺伤整条胳膊肿胀 医生提醒:高档海鲜 鳍有剧毒
实时焦点:【算法训练营day31】LeetCode455. 分发饼干 LeetCode376. 摆动序列 LeetCode53. 最大子序和
记录--这样封装列表 hooks,一天可以开发 20 个页面
焦点热门:如何根据网络位计算主机位的数量
光线传媒回应股价暴跌:节前涨过一波 公司主投的《深海》票房不及预期
世界观天下!庆祝中国新年!梅西东家巴黎全队球员身穿中文球衣出战
焦点速读:4人修改游戏源代码 架设私服 2年牟利260余万元
全球实时:因堵车错过高速免费时段要缴1000多过路费 有司机不干了:网友支招
世界热头条丨郭明錤:苹果或明年推出折叠屏iPad 配备碳纤维支架
字典树学习笔记
世界百事通!2023考研资料整合推荐
看点:为什么要进行网络分层
焦点信息:ChatGPT很厉害 但还有关键问题悬而未决
世界简讯:夫妻过年捡烟花纸壳7天捡5000斤赚500元:网友五味杂陈
环球快消息!注意了!22岁女生熬夜关灯玩手机致霰粒肿:做了手术才解决
长城“铁娘子”王凤英出任小鹏汽车总裁 向何小鹏汇报
焦点快报!跌破0.5元:阿里健康大药房劲度N95口罩0.49元/片(独立包装)
欧拉函数
【天天报资讯】什么是以太网
天天观天下!Docker数据管理
实时:背大锅!调查称三成离婚与一方沉迷手机有关
当前时讯:制作成本不超一千万、抄袭等争议不断!《满江红》:追究到底 还原真相
全球焦点!Nginx 前端部署配置
全球热头条丨惨剧再现 母子俩大年初一家中围炉煮茶身亡:一氧化碳中毒
《魔兽世界》国服停止 暴雪激怒中国玩家态度傲慢!中消协发声
每日视点!《狂飙》演员演出前才知道自己真实身份 导演太会玩
世界热消息:《满江红》7天营收7千万也带不动 光线传媒股价暴跌
世界最资讯丨博主曝吉利品牌2023年产品及渠道规划:领克改直营、血拼插混
Yarn平滑下线节点(Graceful Decommission)
【天天热闻】火山引擎 DataTester:“在字节,A/B 实验是一种信仰”
Asp.Net7 与 Vue3 组成的 BFF模式
属实赚麻了!《满江红》7天为光线传媒创收7000万元
大赚718亿元!网红基金经理张坤、葛兰火速回血
【全球聚看点】2022年各国汽车销量榜:中国第一 印度迅猛崛起
世界速讯:端劳饭碗 中国研发出玉米秸秆合成淀粉及蛋白技术:成本大降
THAILAND是哪个国家?thailand怎么读英语?
职务怎么填?职务侵占罪立案标准
奋进的旋律大结局是什么?奋进的旋律演员表名单
春风徐徐下一句的是什么?春风徐徐打一生肖是什么?
立春节气的特点和风俗有哪些?立春节气朋友圈句子
谷歌浏览器怎么样?谷歌浏览器无法打开网页是什么原因?
地暖怎么进行打压试验?地暖是怎么样供暖的?
LOL裁决之镰怎么解除?lol裁决之镰为什么没了?
《安富莱嵌入式周报》第301期:ThreadX老大离开微软推出PX5 RTOS第5代系统,支持回流焊的自焊接PCB板设计,单色屏实现多级灰度播放视频效果
【全球新要闻】河北小伙深耕OI默默无闻 LOGO设计放眼全球一鸣惊人 当LOGO设计与世界文化擦出火花——JJQ的LOGO设计之路(纯文
MOTO XT390手机什么时候上市的?MOTO XT390手机参数
iPhone5C上市价格是多少?iphone5c还能用微信吗?
当前头条:德系车在中国不香了?2022年大众、BBA少卖了20万台
《满江红》:成也算计 败也算计
【焦点热闻】轻至689克!富士通推出UH-X/H1轻薄本:世界上最轻的14英寸笔电
环球快播:给头发做个香氛SPA:舒蕾山茶花洗发水500ml 19.9元/瓶大促
报道:特斯拉全球开打价格战 大众第一个交枪!CEO:我们不跟
ServletContext与静态变量(static)的区别,数据库连接池放在哪里
最新资讯:Fortran数组排序:冒泡排序法
头条焦点:Python Numpy 中的打印设置函数set_printoptions
环球播报:小米汽车全身照传疯了!轿跑车身+迈凯伦式大灯 网友:保里保气
领90元大额券:可孚全自动血压计49.9元到手 给爸妈买一台
【全球快播报】真正开对撞机的女孩:从不化妆 一守就是13年
当前速看:苹果车祸检测功能误报不断 救援部门被折腾惨了
新消息丨可直接丢进马桶里!德祐湿厕纸大促:3包不到16元
【世界快播报】读Java8函数式编程笔记05_数据并行化
每日热门:首次打破日本垄断 国内量产OLED显示屏关键材料FMM
每日热文:小米MIUI 14最新升级计划出炉:小米11、Redmi K40等25款机型在列
天天要闻:《满江红》票房近32亿 大V称制作成本不超一千万:官方已无视造谣者
世界信息:真实感渲染:模型变换
码龄几十年的老程序员都不知道的存图小技巧“指向立体星” 学到就是赚到!速戳>>
【全球独家】微信春节大数据出炉:发送红包40亿次 《三体》阅读量第一
你想坐吗?国产大飞机C919航班定了:2月28日北京上海首航
天天即时看!CPU核心数越多越好?看懂CPU核心线程数才能不被骗
全球热点![概率论与数理统计]笔记:5.2 参数的最大似然估计与矩估计
Exgcd(扩展欧几里得算法)
【全球报资讯】滑铁卢?《流浪地球2》北美上映票房不敌印度电影
热门看点:ChatGPT爆火:谷歌、Meta等压力大
微资讯!男子把绿动车当成绿皮车抽烟被拘:其实是“绿巨人”电力动车组
当前速看:状告4位大V后 《满江红》片方称不再起诉其他造谣者:不再回应
装饰模式
全球热头条丨漫威宇宙十大战力英雄:钢铁侠仅排第五
【世界新要闻】Intel花六个月造了一块乐高Arc显卡:1比1完美复刻!
环球资讯:【byob】 payload 生成过程
每日时讯![概率论与数理统计]笔记:5.1 点估计概述
热议:VMware vSphere ESXi 7.0安装配置