范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Java设计模式23种设计模式(万字图文全面总结)

  设计模式是前人根据经验总结出来的,设计模式不仅仅只是一种规范,更多的是一种设计思路和经验总结。
  掌握好设计模式的目的只有一个:提高你高质量编码的能力,使用好设计模式就相当于是站在了前人的肩膀上。
  在JDK的源码里,以及框架中间件的源码实现里,到处都是设计模式。
  如果你想看懂框架源码,更加深入的了解技术的底层实现,掌握好设计模式就变得至关重要了@mikechen。
  主要介绍六点:设计模式的目的设计模式常用7大原则设计模式的种类5种创建型模式7种结构型模式11种行为型模式设计模式的目的
  设计模式的目标:提升代码重用性、可读性、可扩展性、可靠性,还能降低系统中类与类之间的耦合度,使程序呈现高内聚低耦合的特性。
  设计模式的价值,主要分为如下4点:
  1.代码重用性
  相同功能的代码不用多次编写
  2.可读性
  设计模式使程序易读,编程规范性,便于其他程序员的阅读和理解
  3.可扩展性
  设计模式能使编写的程序具有良好的可扩展性,满足系统设计的开闭原则。比如策略模式,就是将不同的算法封装在子类中,在需要添加新的算法时,只需添加新的子类,实现规定的接口,即可在不改变现有系统源码的情况下加入新的系统行为。
  4.可靠性
  当我们增加新的功能后,对原来的功能没有影响 设计模式常用7大原则
  1.单一职责原则
  对于类来说,一个类应该只负责一项职责
  2.接口隔离原则
  避免其实现类污染
  3.依赖倒转(倒置)原则
  1)高层模块不应该依赖底层模块,二者都应该依赖其抽象
  2)抽象不应该依赖细节,细节应该依赖抽象
  3)依赖关系传递的3中方式 接口传递 构造方法传递 setter方法传递
  4.里氏替换原则
  子类尽量不要重写父类的方法
  5.开闭原则
  修改关闭,扩展开发
  6.迪米特法则
  一个对象应该对其他对象保持最少的了解
  又叫最少知道原则,即一个类对自己依赖的类知道越少越好。
  7.合成复用原则
  尽量使用组合/聚合,不要用继承 设计模式的种类
  1、创建型模式
  用来描述 "如何创建对象",它的主要特点是 "将对象的创建和使用分离"。
  2、结构型模式
  用来描述如何将类或对象按照某种布局组成更大的结构。
  3、行为型模式
  用来识别对象之间的常用交流模式以及如何分配职责。 5种创建型模式
  创建型模式主要包括5 种模式:
  1.单例模式
  定义
  创建某个类的实例,该类的实例在系统中只有这一份
  单例模式主要是为了避免因为创建了多个实例造成资源的浪费,且多个实例由于多次调用容易导致结果出现错误,而使用单例模式能够保证整个应用中有且只有一个实例。
  应用场景 一个国家只有一个总统; 项目中用于读取配置文件的类; 数据库连接池,因为数据库连接池是一种数据库资源; Spring中,每个 Bean  默认都是单例的,这样便于Spring容器进行管理; Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行
  2.工厂模式
  定义
  工厂模式属于创建型设计模式,需要生成的对象叫做产品,生成对象的地方叫做工厂。
  把对象的创建和业务逻辑层分开,这样以后就避免了修改客户代码,如果要实现新产品直接修改工厂类,而不需要在原代码中修改,这样就降低了客户代码修改的可能性,更加容易扩展。
  应用场景
  在任何需要生成复杂对象的场景,都可以使用工厂模式。
  3.抽象工厂模式
  定义
  抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂,该超级工厂又称为其他工厂的工厂。
  在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类,每个生成的工厂都能按照工厂模式提供对象。
  应用场景 系统中有多于一个的产品族,而每次只使用其中某一产品族。 在很多软件系统中需要更换界面主题或者一键换肤。 DAO层支持多种类型的数据库,动态切换时。 不同操作系统代码差异化,可以切换不同操作系统时。
  4.原型模式
  定义
  将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新实例。
  应用场景 类初始化需要消耗非常多的资源,这个资源包括数据、硬件资源等,通过原型拷贝避免这些消耗。 一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式拷贝多个对象供调用者使用,即保护性拷贝。
  5.建造者模式
  定义
  将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成不同复杂对象。
  应用场景 建造者模式一般用在构建流程或者组成部件固定的场合,将这些部件分开构建成为组件对象,再将这些组件对象整合成为目标对象。 比如创建一个旅游产品,旅游产品里面有机票,酒店,门票,保险等等,行程定制师可以根据你的要求,组装成一个你满意的产品。 生活中的应用场景,比如汽车中的方向盘,发动机,车架,轮胎等等部件也是多种多样的。 7种结构型模式
  应用场景
  1.适配器模式
  定义
  将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。
  目的是兼容性,让原本因接口不匹配,不能一起工作的两个类可以协同工作。
  应用场景 封装有缺陷的接口设计 统一多个类的接口设计,比如一个支付系统,有三种不同的支付方式,微信支付、支付宝支付、网银支付,这三种支付的实现方法都不一样,那么我们可以用适配器模式,让他们对外具有统一的方法,这样,我们在调用的时候就非常的方便。 兼容老版本的接口,这个在我们系统升级中经常会用到。
  2.桥接模式
  定义
  把 抽象(Abstraction) 与 行为实现(Implementation) 分离开,保持各部分的独立性以及功能扩展。
  应用场景
  JDBC连接数据库时,利用驱动来桥接。
  3.装饰模式
  定义
  动态的将新功能附加到对象上,就像打包一个快递,一层一层地给物品添加外层包装。
  应用场景 扩展一个类的功能。 动态增加功能,动态撤销。
  4.组合模式
  定义
  依据树形结构来组合对象,用来表示部分以及整体层次,比如:学校、院、系的关系。
  应用场景 组合模式非常适合有递归迭代性质的结构或者逻辑。即结构上存在树型或者包含关系,逻辑上"整体"和"部分"的行为和状态的对外表现是一致的,或者是类似的。 比如目录和文件,目录可以只包含子目录,也可以只包含文件,当然可以同时包含子目录和文件,而子目录又可以包含子目录或者文件。
  5.外观模式
  定义
  为多个复杂的子系统提供一个一致的接口,使这些子系统更加容易被访问。
  应用场景 为一个复杂的模块或子系统提供一个供外界访问的接口。
  6.享元模式
  定义
  使用共享对象可以有效的支持大量细粒度对象的复用,比如:池化技术,数据库连接池 、线程池 等
  应用场景 系统中存在大量的相似对象。 细粒度的对象都具备较接近的外部状态,而且内部状态与环境无关,也就是说对 象没有特定身份。 需要缓冲池的场景。
  7.代理模式
  定义
  封装目标对象,并添加额外的功能,对客户端提供更多更优的服务,分类: 静态代理和动态代理 。
  应用场景 日志的采集 权限控制 实现aop Mybatis mapper Spring的事务 全局捕获异常 Rpc远程调用接口 分布式事务原理代理数据源 11种行为型模式
  行为型模式主要包含11种模式:
  1.模板方法模式
  定义
  定义了操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定步骤。
  应用场景 多个子类有共同的方法,且逻辑基本相同 可以把核心的算法和重要的功能设计为模板方法,子类去实现相关细节功能 系统在进行重构或者是功能优化的时候可以将子类重复的代码抽离到父类中
  2.命令模式
  定义
  将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。
  消除了 请求发送者 与 请求接收者 之间的耦合,对象之间的调用关系更加灵活,实现解耦。
  应用场景 当一个应用程序调用者与多个目标对象之间存在调用关系时,并且目标对象之间的操作很类似的时候。 例如当一个目标对象内部的方法调用太复杂,或者内部的方法需要协作才能完成对象的某个特点操作时。 有时候调用者调用目标对象后,需要回调一些方法。
  3.访问者模式
  定义
  将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。
  应用场景 对象结构比较稳定,但经常需要在此对象结构上定义新的操作。 需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免这些操作"污染"这些对象的类,也不希望在增加新操作时修改这些类。
  4.迭代器模式
  定义
  提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示,提供一种遍历集合元素的统一接口。
  应用场景
  统一接口 : 为遍历 不同的 集合结构 , 提供统一接口
  5.观察者模式
  当一个对象被修改时,则会自动通知依赖它的对象。
  观察者,顾名思义,就是一个监听者,类似监听器的存在,一旦被观察/监听的目标发生的情况,就会被监听者发现,这么想来目标发生情况到观察者知道情况,其实是由目标将情况发送到观察者的。
  应用场景
  多用于实现订阅功能的场景,例如微博的订阅,当我们订阅了某个人的微博账号,当这个人发布了新的消息,就会通知我们。
  6.中介者模式
  定义
  是用来降低多个对象和类之间的通信复杂性,这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。
  应用场景 当对象之间存在复杂的网状结构关系而导致依赖关系混乱且难以复用时。 想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。可以通过引入中介者类来实现,在中介者中定义对象交互的公共行为,如果需要改变行为则可以增加新的具体中介者类。
  7.备忘录模式
  定义
  所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。
  应用场景 需要保存和恢复数据的相关状态场景 Windows 里的 ctri + z IE 中的后退。 数据库连接的事务管理就是用的备忘录模式
  8.解释器模式(Interpreter模式)
  定义
  这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。
  应用场景
  重复发生的问题可以使用解释器模式
  例如,多个应用服务器,每天产生大量的日志,需要对日志文件进行分析处理,由于各个服务器的日志格式不同,但是数据要素是相同的,按照解释器的说法就是终结符表达式都是相同的,但是非终结符表达式就需要制定了。在这种情况下,可以通过程序来一劳永逸地解决该问题。
  9.状态模式
  定义
  我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。 允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。
  应用场景 行为随状态改变而改变的场景这也是状态模式的根本出发点,例如权限设计,人员的状态不同即使执行相同的行 为结果也会不同,在这种情况下需要考虑使用状态模式。 QQ的不同状态可以用状态模式来处理,包括离线,登录中,在线和忙碌
  10.策略模式
  定义
  利用面向对象的多态特点,引用的是抽象父类,当实际调用的时候是该对象的实体子类,从而调用不同的逻辑
  应用场景 诸葛亮的锦囊妙计,每一个锦囊就是一个策略。 旅行的出游方式,选择骑自行车. 坐汽车,每一种旅行方式都是一个策略。
  11.职责链模式(责任链模式)
  定义
  责任链模式:在这种模式中,通常每个接收者都包含对另一个接收者的引用,如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。
  应用场景 多个对象可以处理同一个请求,但具体由哪个对象处理则在运行时动态决定。 JAVA WEB 中 Apache Tomcat 对 Encoding 的处理 Struts2 的拦截器 Servlet 的 Filter实现
  以上就对23种设计模式做了一个完整的全面总结,希望对你所用!
  如果不满足于文章详解, 私信【架构】获取视频详解!

影响和控制我们日常生活的三家公司,美国总统为其打工,操控世界你觉得对我们日常生活影响最深的公司是哪一家?是苹果微软谷歌还是阿里企鹅百度。如果让你选择三家,你会选择谁?要我说这些都不是,我要说的这三家公司,有些人连名字都没有听过,但是却实实在看似风马牛不相及,但刘邦与华为在解决同一个问题实用历史楚汉争霸篇20引子公元前207年,刘邦在进入关中后,靠一招约法三章,赢得了群众的拥护,从此走上帝王之路。2014年,华为以mate系列破局,开启了高端之路。这两件事差了两千抖音开启无法关闭的IP地址归属地功能,但真正有用的不是这些前段时间不少软件为严厉打击网络暴力以及谣言之流开启了无法关闭的IP地址归属地的功能显示,更新之后发现抖音微博确实已经开启了这一功能。但要论实际上有什么用?这没什么大用,只有一点用处选配助听器是否先要去医院洗耳朵呢?您好,选配助听器是否先要去医院洗耳朵呢?可以先去专业的验配门店,验配师都会检查下耳朵,做下简单的处理,如果有耵聍栓塞验配师会告知需要去医院取出,希望我的回答能帮到您。不用的,验配助拯救者是国内笔记本电脑最好的吗?最好这个词要看个人。目前拯救者是全国游戏本第一梯队的,联想拯救者戴尔游闸华硕天选红米G,都是第一梯队的当然,ROG外星人微星GE,是超第一梯队的,2W以上人民币。不要黑联想(可以黑OPPOreno7或者Vivos12,买哪个?大神推荐一下?文小伊评科技既然又到了对比手机的环节,根据惯例我们还是直接进行配置外观体验价格的对比,我们就来详细的做一个对比,希望可以帮到你。第一环节购入成本。目前VIVOS12在PDD百亿补贴备受争议的问界M5,所谓山寨保时捷为何咨询试驾还这么火爆?何为山寨?如果只造个壳,没有任何内涵,没有品质,做工粗糙,那才是山寨!比如众泰!问届M5,从品质做工科技基本都是自己的技术!比如车机是鸿蒙可以说是车机天花板,机械是前4球头双叉臂,图书编辑排版都用哪些软件?推荐几个靠谱的排版软件,建议收藏。1。AdobeInDesign目前国际上最常用的最专业的排版软件是Adobe公司的InDesign,它具有强大的电子出版和网络出版的制作功能,可制电脑经常死机怎么办?教你一个方法,轻松解决我们平常使用电脑。经常会遇到电脑死机的情况。那时候我们的文件都无法正常运行。这位很影响我们的使用。下面小编就给大家分享一些解决死机的一个方法。第一种电脑死机很大程度上跟配置有关系。每经10点丨港股阿里巴巴快速反弹,恒生科技指数跌幅收窄至1。5国家卫健委昨日新增本土确诊病例368例每经编辑王晓波1丨国家卫健委昨日新增本土确诊病例368例本土无症状感染者5647例每经AI快讯,5月2日024时,31个省(自治区直辖市)和新疆生产建设兵团报告新增确诊病例384例马云被起诉,阿里或将面临重大调整,又摊上什么事了?一提起阿里,我们首先想到马云,作为阿里的灵魂人物,最近却被华尔街投资者提起了集体诉讼。然而这消息一出,顿时就在国内引起了一片哗然,马云在我国互联网刚刚普及的时候,就嗅到了商业的气息
从iOS阵营到Android的阵营iOS系统的强大让iPhone面对安卓手机时,硬件实力的光环被大大削弱。每年新机发布,关于iOS阵营的iPhone和安卓阵营的华为三星小米等话题就一直是科技领域最热门的话题,尤其是沉寂的互联网世界与新势力创业不再是热点的词,2019年讨论最多的是裁员。大公司不断拓展边界,中小公司不断做存量的斗争,创业公司挣扎在生与死的边界。这大概是2019年最重要的社会现象了。前一次看到创业热情还西安大雁塔每周六的古玩地摊人山人海看的人多买的人少表面繁荣西安大雁塔南广场每周六的古玩地摊都是人山人海,一眼看过去非常的繁荣。地下文物看陕西,但真正的地下文物基本也不会在地摊上流通。很多以此为业的人都表示买卖越来越难做,逛的人很多出手的人小时候弹弓是用树叉或钢丝做的现在花样很多价格从几十到几千现在很多集市上都能看到售卖弹弓的摊位,勾起60后70后的回忆。小时候玩具匮乏,或者贫穷买不起玩具,很多家长都会用Y形树叉或钢丝给孩子做一个当玩具。如今市场上售卖的弹弓花样很多,按档民间刺绣物品出现在古玩市场的各个摊位收藏者在这里寻找心头好在西安大雁塔南广场每周六的古玩集市上,很多的刺绣用品出现在各个摊位,以前人家的窗帘门帘等只要是手工刺绣物品都是很好的收藏品。这一件精美的刺绣物品,老板开价260元,都是手工绣的,很黑果木树瘤制作烟嘴受欢迎半米多长烟嘴抽烟很霸气市场中这个造型怪异的木棍,如果老板不讲,真不知道是做什么用的。经过演示,才知道原来这是根木质烟杆。看着用这个半米多长的烟杆抽烟的架势,还真挺霸气。老板说,这些都是用黑果木制作而成的前一秒嗷嗷待哺喝着母乳后一秒有人购买就成为餐桌上的羔羊在西安灞桥大集上,看到有人售卖羊只,其中一只母羊和正在吃奶的小羊引起人们的围观。临近春节,很多人购买活羊宰杀,可以保证肉质新鲜。但很多人好奇,这母羊和吃奶的小羊有人买吗?有人问羊主西安古玩市场上这些物件如果不论真假你可能一样也没用过逛西安古玩市场时,在众多的小摊上看到了一些有意思的东西,与大家分享交流一下。枷锁,古时押系犯人用的刑具。虎符,前不久央视的国家宝藏介绍过陕西历史博物馆的虎符,是古代皇帝调兵遣将用的新中国第一套完整的货币其中3510元由苏联代印整套估价10万中国人民银行1955年发行的第二套人民币是中国第一套完整精致的货币。第一套人民币的面额较大(最大为5万元),单位价值较低,在流通和计算时,以万元为单位,不利于商品流通和经济发展。第小人书曾经陪伴许多人的童年长大的他们旧书摊上回忆过去的时光对于很多快要步入中年的人来说,小时候没有现在那么多的娱乐活动,陪伴童年时间最多的就是这些小人书连环画武侠小说等各种书籍了。而社会的发展,娱乐生活的丰富,小人书退出历史舞台,不再发展乡村大集上二手鞋都卖给了谁旧电子产品最热销在一些乡村的集市上,总有这样一片让人啧啧称奇的区域,就是二手物品的交易区域。这里虽然是售卖二手物品,但是种类极其多样。像这种卖旧鞋的小摊还不在少数,看到摊子上这么多双的二手鞋,实在