设计模式
文章平均质量分 66
胖柯G
这个作者很懒,什么都没留下…
展开
-
设计模式-01设计原则
找出应用中可能变化之处,把它独立出来,不要和那些不需要变化的代码混在一起针对接口编程,而不是针对实现编程为了交互对象之间的松耦合设计而努力。原创 2023-07-23 16:09:45 · 31 阅读 · 0 评论 -
设计模式-02单例模式
总结:有人提出,每次获取单例对象都需要加锁的优化方案,在创建对象的时候加锁,但是当多线程获取单例对象的时候,可能存在多个线程都进入if判断语句中,导致获取对象并非单例。总结:通过静态内部类的装载机制实现了线程安全问题,而且静态内部类只有在真正调用getInstance()方法时才会真的加载静态内部类起到了懒加载的作用。总结:解决了懒加载的问题,避免了资源的使用浪费,但每次线程获取单例对象都需要加锁,性能底下。推荐指数:☆ ☆ ☆ ☆ ☆。推荐指数:☆ ☆ ☆ ☆ ☆。推荐指数:☆ ☆ ☆。原创 2023-07-23 16:15:50 · 30 阅读 · 0 评论 -
设计模式-03工厂模式
抽象工厂与工厂方法模式的区别在于:抽象工厂是可以生产多个产品的,例如 MysqlFactory 里可以生产 MysqlUser 以及 MysqlLogin 两个产品,而这两个产品又是属于一个系列的,因为它们都是属于MySQL数据库的表。和简单工厂相比,工厂方法进一步解耦,把简单工厂进一步抽象出来一个工厂接口,由具体工厂来实现实例对象的生产,不用关注具体的细节。但工厂方法模式的缺点是每增加一个产品类,就需要增加一个对应的工厂类,增加了额外的开发量。抽象工厂(定义了抽象工厂,管理工厂有哪些需要共同的操作)原创 2023-07-23 16:23:22 · 31 阅读 · 0 评论 -
设计模式-04原型模式
clone方法在拷贝对象时为浅拷贝,及只能拷贝了基本数据类型和String类型的属性,引用数据类型无法拷贝。可以通过序列化和反序列化方式实现自己的深拷贝方法。原创 2023-07-23 16:27:12 · 29 阅读 · 0 评论 -
设计模式-05建造者模式
抽象工厂模式实现对产品家族的创建,一个产品家族是这样一系列产品:具有不同分类维度的产品组合,采用抽象工厂模式不需要关心构造过程,只关心什么产品是由什么工厂生产即可。而建造者模式则是要求按照指定的蓝图建造产品,它主要目的是通过组装零配件而产生一个新产品。源码案例如:StringBuilder。抽象工厂模式和建造者模式比较。原创 2023-07-23 16:28:59 · 34 阅读 · 0 评论 -
设计模式-06适配器模式
基本介绍:adapter类,通过继承src类,实现dst类接口,完成src-》dst的适配。原创 2023-07-23 16:32:09 · 32 阅读 · 0 评论 -
设计模式-07桥接模式
桥接模式基于类的最小设计原则,通过使用封装、聚合、继承等行为让不同的类承担不同的职责,他的主要特点就是把抽象与行为实现分离开来,从而可以保持各部分的独立性以及应对他们功能的扩展。源码使用:jdbc的driver接口,driver就是一个接口,下面可以有MySQL的Driver和oracle的Driver,这些可以看做是实现接口。介绍:将实现与抽象放在两个不同的类层次中,是两个层次可以独立改变。案例:打印小米、vivo品牌,折叠和翻盖手机的组合。原创 2023-07-23 16:33:58 · 26 阅读 · 0 评论 -
设计模式-08装饰者模式
装饰者模式实现,使单个产品组合和方便,扩展性更好,当新增咖啡类型和调料的时候只需要继承coffee和Decorator就可以实现扩展,特别方便。装饰者模式:动态的将新功能附加到对象上,在对象功能扩展方面,他比继承更有弹性,装饰者模式也体现了开闭原则(OCP)。2、动态的为一个对象增加功能,而且还能动态撤销。(继承不能做到这一点,继承的功能是静态的,不能动态增删。源码案例:java的IO结构,FilterInputStream就是一个装饰者。缺点:产生过多相似的对象,不易排错!1、需要扩展一个类的功能;原创 2023-07-23 16:35:16 · 48 阅读 · 0 评论 -
设计模式-09组合模式
组合模式又叫部分-整体模式,他创建对象组的树形结构,将对象组合成树状结构以表示,**“整体-部分”**的层次关系。组合模式依据树形结构来组合对象,用来表示部分以及整体的层次。组合模式使得用户对单个对象和组合对象的访问具有一致性,即:组合能让客户以一种的方式处理个别对象以及组合对象。原创 2023-07-23 16:36:43 · 32 阅读 · 0 评论 -
设计模式-10外观模式
外观模式,也叫过程模式,外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式通过定义一个一致的接口,用以屏蔽内部子系统的细节,使得调用端只跟这个接口发生调用,而无需关心这个子系统的内部细节。原创 2023-07-23 16:38:24 · 37 阅读 · 0 评论 -
设计模式-12代理模式
代理模式为对象提供一个替身,以控制对这个对象的访问,即通过代理对象访问目标对象,这样做的好处是,可以在目标对象实现的基础上,增强额外的功能和操作,即扩展了目标对象的功能被代理的对象可以是远程对象、创建开销大的对象或者需要安全控制的对象代理模式又不同形式,主要可以分为三种:1)静态代理2)动态代理,也可以成为JDK代理,接口代理3)Cglib代理,可以在内存中动态的创建对象,而不需要实现接口,他是属于动态代理的范畴。原创 2023-07-29 16:11:58 · 30 阅读 · 0 评论 -
设计模式-11享元模式
享元模式也叫蝇量模式,运用共享技术有效的支持大量细粒度的对象常用于系统底层开发,解决系统的性能问题,像数据库连接池,里面都是创建好的对象,在这些连接对象中有我们需要的则直接拿来用,避免重新创建,如果没有我们需要的,则重新创建一个享元模式能够解决重复对象的内存浪费的问题,当系统中有大量相似对象,需要缓冲池时,不需总是创建新对象,可以从缓存池里拿,这样可以降低系统内存,同时提高效率。原创 2023-07-29 16:16:47 · 31 阅读 · 0 评论 -
设计模式-13模板模式
模板方法模式,在一个抽象的类公开定义执行它的方法的模板,它的子类可以按需要重写方法实现,但调用将以抽象类中的定义执行简单说,模板方法模式定义了一个操作中的算法的骨架,而将一些步骤延迟到了子类中,使得子类可以不改变一个算法的结构,就可以重定义改算法的某些特定步骤模板模式属于行为型设计模式。原创 2023-07-29 16:19:27 · 31 阅读 · 0 评论 -
设计模式-14命令模式
命令模式:在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需要在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式进行设计命令模式使得请求的发送者和接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活,实现解耦在命令模式中,会将一个请求封装成一个对象,以便使用不同参数来表示不同的请求,同时命令模式也支持撤销的操作。原创 2023-07-29 16:21:17 · 34 阅读 · 0 评论 -
设计模式-15访问者模式
访问者模式,封着了一些作用于某些数据结构的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的操作主要将数据结构和数据操作分离,解决数据结构和操作耦合性问题访问者模式的基本工作原理是:在被访问的类里面加一个对外提供接待访问者的接口访问者模式主要应用场景是:需要对一个对象结构中的对象进行很多不同的操作(这些操作彼此没有关联),同时需要避免让这些操作“污染”这些对象的类,可以选用访问者模式解决。原创 2023-07-29 16:23:30 · 49 阅读 · 0 评论 -
设计模式-16迭代器模式
迭代器模式属于行为型模式如果我们的集合元素是用不同的实现的,有数组,还有java的集合类,或者还有其他方式,当客户端要遍历这些集合元素的时候就要使用多种的遍历方式,而且还会暴露元素的内部结构,可以考虑使用迭代器模式迭代器模式,提供一种遍历集合元素的统一接口,用一直的方法遍历集合元素,不需要知道集合对象的底层表示,即:不暴露内部结构。原创 2023-07-29 16:26:23 · 30 阅读 · 0 评论 -
设计模式-17观察者模式
观察者模式:对象之间多对一的一种设计方案,被依赖的对象为subject,依赖的对象为observer,subject通知Observer变化,比如这里的奶站是subject,是1的一方,用户是Observer,是多的一方。observer:接收输入,主要是update()方法。实现一个不同网站请求天气网站,获取天气不断变化的功能。subject:等级、移除、通知。观察者模式类似于定牛奶业务。原创 2023-07-29 16:27:55 · 34 阅读 · 0 评论 -
设计模式-18中介者模式
中介者模式,用一个中介对象来封装一系列的对象交互,中介者使各个对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的关系中介者模式属于行为型模式,使代码更易于维护比如MVC模式,controller使Model和View的中介者,在前后端交互时起到了中间人的作用。原创 2023-07-29 16:29:42 · 40 阅读 · 0 评论 -
设计模式-19备忘录模式
备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态可以这样理解备忘录模式:现实生活中的备忘录是用来记录某些要去做的事情,或者是记录已经达成的共同遇见的事情,以防忘记。而在软件层面,备忘录模式有着相同的意义,备忘录对象主要用来记录一个对象的某种状态,或者某些数据,当要做回退时,可以从备忘录对象里获取原来的数据进行恢复操作备忘录模式属于行为型模式。原创 2023-07-29 16:31:07 · 53 阅读 · 0 评论 -
设计模式-20解释器模式
在编译原理中,一个算数表达式通过词法分析器形成词法单元,而后这些词法单元再通过语法分析器构建分析树,最终形成一颗抽象的语法分析树,这里的词法分析器和语法分析器都可以看做是解释器解释器模式:是指给定一个语言,定义它的文法的一种表示,并定义一个解释器,使用该解释器来解释语言中的句子(表达式)应用场景:1。应该可以将一个需要解释执行的语言中的句子表示为一个抽象语法树2.一些重复出现的问题可以用一种简单的语言来表达3.一个简单语法需要解释的场景。原创 2023-07-29 16:32:33 · 37 阅读 · 0 评论 -
设计模式-21状态模式
状态模式主要用来解决对象在多种状态转换时,需要对外输出不同的行为问题,状态和行为是一一对应的,状态之间可以相互转换当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类。原创 2023-07-30 14:58:43 · 35 阅读 · 0 评论 -
设计模式-22策略模式
策略模式中,定义算法族,分别封装起来,让他们之间可以相互替换,此模式算法的变化独立于使用算法的用户策略模式体现了几个设计原则:第一、把变化的代码从不变得代码中分离出来;第二、针对接口编程而不是具体类(定义了策略接口);第三、多用组合或聚合少用继承(客户使用组合方式使用策略)原创 2023-07-30 15:02:12 · 33 阅读 · 0 评论 -
设计模式-23职责链模式
职责链模式,又叫责任链模式,为请求创建一个接收对象的链,这种模式对请求发送者和接收者进行解耦职责链模式通常每个接受者都包含对另一个接收者的引用,如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依次类推职责链模式属于行为模式设计模式是编程中有意或者无意使用到的,并且同一种设计模式也不是100%的一样,设计模式主要是提高程序的扩展性、可读性、可维护性、规范性设计模式是可以结合使用,源码中可能部分使用到了A模式,也有可能部分使用到了B模式。原创 2023-07-30 15:17:08 · 44 阅读 · 0 评论