摘要:,命令模式,将行为请求者和行为实现者解耦,将行为抽象为对象。解释器模式,迭代器模式,将集合对象的存储数据和遍历数据职责分离。即将遍历的责任交给迭代器返回的迭代器,迭代器。
设计模式总结
创建型:除了直接new来实例化对象外,提供了多种隐藏创建逻辑的生成对象的方法
结构型:通过对象和类的组合,得到新的结构和功能
行为型:解决对象之间的通行和功能职责分配
详细分类
工厂
简单工厂模式就是一个静态工厂类,提供一个产品族,工厂通过传入的产品类型参数,决定实例化具体的产品。 (日志记录器,依据保存地点生成对应的日志记录器)
工厂方法模式,一个产品对应一个工厂,便于扩展新的产品,只需要增加新的产品子类和工厂子类就可以。
抽象工厂模式,引入产品树,一个工厂实例对应一系列产品。与工厂方法模式的区别就是,工厂方法只有一个产品接口,而抽象工厂有多个产品接口。(JDBC驱动)
单例模式 , 提供全局的一个唯一实例,避免频繁的创建和销毁。(序列号生成器,计数器),实现方式有懒汉式,饿汉式,双重校验锁,静态内部类,枚举
建造者模式,关注产品的组装和次序。(快餐店基本食品相对固定,可以组装出多种套餐)
原型模式,使用克隆的方法来生成对象。(类初始化西药消耗较多资源时,比如在使用不可变类的时候,生成副本)
适配器模式,接口转换。适配器其实更像个代理类,实现目标接口,然后将目标接口的方法转给被适配的接口的方法。
桥接模式,就是原来通过派生子类来实现的变化改为组合的方式来实现。比如一个图形类,实现两个子类,一个画红圈,一个画绿圈,改为抽取一个draw借口,实现两个reddraw和greendraw类,原来的图形类组合draw类
过滤器模式,对对象的流式操作。参考jdk8的stream api
组合模式。使用一个元素类型,形成一个树结构,元素类型中包含自己元素数组域。
装饰器模式,实现被装饰类接口,并且代理被装饰类的方法,在代理方法的同时加入装饰代码。实现方式和适配器差不多,不过目的不一样,只不过适配器代理的是不兼容的接口,而装饰器代理的是被装饰接口
外观模式,屏蔽复杂系统,提供统一接口简化客户端调用。这个比较符合地米特最少知道法则。
享元模式。对象池,共享对象。比如线程池,连接池。同时也是一种缓存思想。
代理模式。spring aop,控制对象访问。光看uml,和适配器,装饰器非常像,区别在于应用场景上。
责任链模式,参考tomcat的pipeline。每个责任链组件都持有者下一个组件的应用,当前组件处理方法之后调用下一个组件的处理方法。,
命令模式,将行为请求者和行为实现者解耦,将行为抽象为对象。还是以遥控器和电视机举例子,按一般的使用思路,遥控器持有电视机实例,遥控器通过每个具体的方法来操作电视机。引入命令模式后,遥控器持有命令列表(这样才能支持撤销/恢复),命令持有电视机对象,一个命令对应电视机一个操作,遥控器执行命令即可,可作为遥控器的使用者,就往遥控器里面添加命令对象,遥控器执行命令对象。
解释器模式,
迭代器模式,将集合对象的存储数据和遍历数据职责分离。“用于顺序访问集合对象的元素,不需要知道集合对象的低层表示”,即你可以使用迭代器顺序访问hashtable的key,而不需要知道key在hashtable中是如何组织的。即将遍历的责任交给迭代器(Hashtable返回的key迭代器,value迭代器)。设计上来说,迭代器类会是容器类的内部类,生成的内部类实例持有者外部类的引用。
中介者模式,解耦对象之间的交互(MVC中的C就是M和V的中介,消息中间件的订阅)
备忘录模式,类似savepoint。主要有三个角色:状态类(单个savepoint),操作类(读取或保存savepoint),状态列表类(savepoint列表)
观察者模式,事件分发,异步。简单的观察者实现时维护状态的对象持有并维护一个观察者列表,状态发生时逐个通知。不过现在较通用的是通过消息中间件的消息订阅的方式,来通知变更。
状态模式,将状态抽象为类,形成一个状态树。改变状态时,替换上下文中的状态类,这样上下文中,看起来,状态改变时,行为也改变了。
空对象模式,提供空对象而不是Null。这个在实战中比较有用,可以避免大量的是否等于NULL的判断,比如流程申请页面,第一次申请和退回到申请页面,如果不是用空对象,页面就要增加很多空判断。如果使用空对象,则可以一致处理。
策略模式, 封装算法,任意替换。实现上和状态模式非常像。仅仅是抽象的对象不同,状态模式抽象的是状态,策略模式抽象的是算法,都是通过替换上下文中对应的类,来达到改变行为的目的。
模板模式,定义算法/流程骨架,一些步骤延迟到子类去实现,由子类来定义算法的某个具体步骤。大多框架均适用模板模式,比如spring的容器实现,或是tomcat的容器初始化,由上层定义通用过程,每一层的子类逐步完整整个骨架内的步骤
访问者模式,将数据结构和数据操作分离。BUT HOW?数据对象提供方法,接纳访问者对象,然后在访问者对象的访问方法中,将this传入,这样,在访问者中,就可以访问该类,并进行操作了。对一个对象可以提供多种不同行为的访问者,这样数据存储和数据操作之间就解耦了。这种模式,在spring的bean初始化的时候有使用,将reader传入factory,然后将this传入reader,reader加载完beandefinition后,再将之添加进factory
MVC模式,M-业务模型,V-模型的展示,C-控制器。V可以简单理解为业务模型对象的toString功能的解耦,通过控制层C,M和V进行关联更新,新的状态参数通过C传给M,C将新的状态发送给V。
业务代表模式,有四个角色,客户端(client),业务代表(business delegate) , 查询服务(lookup service), 业务服务(business service). 业务代表通过查询服务得到具体的业务服务子类,向客户端提供服务。
组合实体模式
数据访问对象模式
前端控制器模式
拦截过滤器模式
服务定位模式
传输对象模式
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/67796.html
摘要:哪吒社区技能树打卡打卡贴函数式接口简介领域优质创作者哪吒公众号作者架构师奋斗者扫描主页左侧二维码,加入群聊,一起学习一起进步欢迎点赞收藏留言前情提要无意间听到领导们的谈话,现在公司的现状是码农太多,但能独立带队的人太少,简而言之,不缺干 ? 哪吒社区Java技能树打卡 【打卡贴 day2...
摘要:参与者项目经理产品经理开发经理测试经理及其它相关人员。项目上线后问题反馈针对项目客户反馈问题进行分析总结,类似缺陷分析,重点总结遗漏的原因及后需的规避措施。六汇总整理各部门总结并发布基于测试总结过程中的数据分析,我们提出了对部门的建议。 最近参与了几次面试,面试者的简历中都会提及:需求或者...
摘要:项目开发完成,接下来是上线,关于项目的部署,我司前端是部署在服务器上,关于的相关文档,请自行查阅本文只记录部署时碰到的一些问题。其他总结文章常规打包优化方案组件通信处理方案后台管理项目总结 项目开发完成,接下来是上线,关于vue项目的部署,我司前端是部署在nginx服务器上,关于nginx的相关文档,请自行查阅;本文只记录部署时碰到的一些问题。 打包 vue项目打包后,是生成一系列的静...
摘要:高级程序设计总结学习了这么久,现在将书中的内容做一个总结,后期会慢慢把剩余的部分添加进来,欢迎大家高级程序设计总结操作符数据类型基本包装类型单体内置对象扩展 javaScript高级程序设计总结 学习了javaScript这么久,现在将书中的内容做一个总结,后期会慢慢把剩余的部分添加进来,欢迎大家starjavaScript高级程序设计总结 操作符 showImg(https://s...
摘要:在学习更多关于的知识和技能现在到了我们总结使用模式构建系列的时候,这是一个很好的机会回顾一下这个系列涵盖的模式所解决的问题,并着重复习每个模式所具有的一些好处以及做出的权衡。长期关注分布式系统及通用型数据库技术。 在MongoDB University学习更多关于MongoDB的知识和技能 现在到了我们总结使用模式构建系列的时候,这是一个很好的机会回顾一下这个系列涵盖的模式所解决的问题...
摘要:工作中常用到的快捷键命令模式下操作行光标处缩进,普通模式下向右缩进总结以上就是我认为作为开发会经常用到的操作,多联系就可以熟练掌握啦 vim起源 showImg(https://segmentfault.com/img/remote/1460000016742520); 上图可以清晰的看到早期的vim作者使用的机器,此时的终端机键盘是没有独立上下左右键位的,所以在vim的设计之初,HJ...
阅读 2505·2023-04-26 03:00
阅读 1348·2021-10-12 10:12
阅读 4132·2021-09-22 15:33
阅读 2874·2021-09-22 15:06
阅读 1480·2019-08-30 15:44
阅读 2079·2019-08-30 13:59
阅读 504·2019-08-30 11:24
阅读 2349·2019-08-29 17:07