设计模式
文章平均质量分 80
码拉松
这个作者很懒,什么都没留下…
展开
-
【设计模式实践系列】组合模式
通过上面的案例可以体会到,组合模式将机构和员工视为一组对象,其中员工为单个对象,机构为组合对象,把他们统一进行处理,利用树结构的特点,递归处理每个“子树”,简化客户端的操作,解耦了复杂对象的处理过程,同时高层模块调用简单,节点增加自由,易于扩展,不过组合模式只适用于类似树形结构的业务数据,实际应用场景有限。原创 2023-02-28 10:00:00 · 700 阅读 · 0 评论 -
万字整理设计模式在框架中的应用
将一个类的接口适配成另一个类的接口所期望的形式,适配器模式实际上是一种补救模式,为了适应两种不同的标准而产生的一种兼容方案。在现实生活中,电源适配器就是一个非常容易帮助我们理解适配器模式的案例,比如有些国家标准电压是110V,我们国家则是220V,两个标准都不能修改,又不得不使用,于是就有了电源适配器,可以接入110V,输出220V,或者接入220V,输出110V。类似的场景还有很多,比如翻译、转接头等等。3. 使用场景系统需要使用现有的类,而此类的接口不符合系统的需要想要建立一个可以重复使用原创 2022-07-26 09:04:24 · 900 阅读 · 0 评论 -
【从优秀源码中学习设计模式】--- 模板方法模式
当业务逻存在一些需要多个步骤来完成,某些步骤是标准统一的,某些步骤根据不同的场景又有不同的处理逻辑,如果全部写在一个类中,可能那些不同场景步骤会出现各种条件判断,无论哪个场景发生修改,都会影响整个流程,这不符合开闭原则,但如果为每个场景都分别实现一套,同样对应相同的步骤就会出现重复的逻辑,又会带来大量的重复代码。那么,模板方法就是解决上述问题的一种非常好的模式,利用模板方法模式可以实现代码的复用和扩展,这实际上在对代码重构时就非常有帮助。由于每一个不同的实现都要一个子类来实现,会导致类的个数变得更多。...原创 2022-07-18 09:06:46 · 576 阅读 · 0 评论 -
【从优秀源码中学习设计模式】--- 责任链模式
责任链模式也是非常实用的一种设计模式,尤其是在许多框架开发中都有应用,因为它可以用来提供框架的扩展点,一种非常经典的应用场景类型就是过滤器、拦截器。责任链模式是一种行为型的设计模式,主要是为了将请求的发送和接收解耦,这样就可以方便扩展多个对象来处理请求,每个对象之间的处理顺序可以自由调配,每个对象处理后的数据也可以互相传递。使用场景前面有介绍了,责任链模式主要就是为了避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。原创 2022-06-20 19:21:15 · 744 阅读 · 0 评论 -
【从优秀源码中学习设计模式】---模板模式
前言本文以Java语言为主,分析包括JDK、Spring、MyBatis、Guava、org.apache.xxx中,等一些优秀的开源代码、项目,在这些开源代码、项目中都包含了大量的设计模式,通过对它们进行分析,能够快速帮助我们学会设计模式的使用方式,由理论过渡到实践中,进而真正了解设计模式的思想,由于内容较多,所以每个设计模式单独写一篇文章,需要了解其他模式请点击对应链接跳转。建造者模式装饰器模式适配器模式策略模式模板模式模板模式是一种非常广泛、实用的设计模式。SpringSpring中原创 2021-11-09 20:38:03 · 450 阅读 · 4 评论 -
【从优秀源码中学习设计模式】---策略模式
前言本文以Java语言为主,分析包括JDK、Spring、MyBatis、Guava等一些优秀的开源代码、项目,在这些开源代码、项目中都包含了大量的设计模式,通过对它们进行分析,能够快速帮助我们学会设计模式的使用方式,由理论过渡到实践中,进而真正了解设计模式的思想,由于内容较多,所以每个设计模式单独写一篇文章,需要了解其他模式请点击对应链接跳转。建造者模式装饰器模式适配器模式策略模式...原创 2021-11-06 23:31:21 · 340 阅读 · 0 评论 -
【从优秀源码中学习设计模式】---适配器模式
前言本文已Java语言为主,分析包括JDK、Spring、MyBatis、Guava等一些优秀的开源代码、项目,在这些开源代码、项目中都包含了大量的设计模式,通过对它们进行分析,能够快速帮助我们学会设计模式的使用方式,由理论过渡到实践中,进而真正了解设计模式的思想。装饰者模式JDKJDK中典型的装饰者模式就是其IO库中提供的字节流相关的类了,比如一般我们读写文件可能会这样写// 基于字节流InputStream is = new BufferedInputStream(new FileInput原创 2021-11-02 08:37:13 · 426 阅读 · 0 评论 -
【从优秀源码中学习设计模式】--- 建造者模式
前言本文以Java语言为主,分析包括JDK、Spring、MyBatis、Guava等一些优秀的开源代码、项目,在这些开源代码、项目中都包含了大量的设计模式,通过对它们进行分析,能够快速帮助我们学会设计模式的使用方式,由理论过渡到实践中,进而真正了解设计模式的思想,由于内容较多,所以每个设计模式单独写一篇文章,需要了解其他模式请点击对应链接跳转。装饰器模式建造者模式JDKCalendar这个类提供了通过建造者模式构建对象的方式public Calendar build() { if (原创 2021-11-01 20:43:14 · 441 阅读 · 0 评论 -
【从优秀源码中学习设计模式】--- 装饰者模式
前言本文以Java语言为主,分析包括JDK、Spring、MyBatis、Guava等一些优秀的开源代码、项目,在这些开源代码、项目中都包含了大量的设计模式,通过对它们进行分析,能够快速帮助我们学会设计模式的使用方式,由理论过渡到实践中,进而真正了解设计模式的思想,由于内容较多,所以每个设计模式单独写一篇文章,需要了解其他模式请点击对应链接跳转。装饰者模式JDKJDK中典型的装饰者模式就是其IO库中提供的字节流相关的类了,比如一般我们读写文件可能会这样写// 基于字节流InputStream i原创 2021-11-01 20:39:28 · 267 阅读 · 0 评论 -
【设计模式实践系列】代理模式
代理模式代理模式属于结构型设计模式,主要是为了能够在不改变原始类代码的情况下,通过引入代理类来给原始类添加功能。原创 2021-10-25 15:25:13 · 132 阅读 · 0 评论 -
【设计模式实践系列】状态模式
状态模式状态模式属于行为性模式,我们通常会创建各种状态的对象和一个行为对象,行为对象会随着状态对象的改变而改变。意图:允许一个对象在其内部状态改变时改变它的行为。主要解决:对选哪个的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。何时使用:代码中包含大量与对象状态有关的条件语句。主要角色状态(State)接口类,定义了状态对象的各种行为。具体状态实现了状态接口的具体状态类,定义了每个不同的状态下,产生的不同的行为。具体状态环境(Context)状态环境类中包含了原创 2021-10-19 08:45:00 · 139 阅读 · 0 评论 -
【设计模式实践系列】观察者模式
观察者模式观察者模式属于行为模式,一个目标物件管理所有依赖于它的观察者物件,并且在它本身的状态改变时主动发出通知,它定义了对象之间的一种一对多的依赖关系。在观察者模式中,主题是通知的发布者,它发出通知时并不需要知道谁是它的观察者,可以有任意数目的观察者订阅并接收通知。意图: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。主要解决: 一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。何时使用: 一个对象(目标对象原创 2020-11-24 10:43:13 · 247 阅读 · 2 评论 -
【设计模式实践系列】单例模式
单例模式单例模式,属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例。意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。主要解决:一个全局使用的类频繁地创建与销毁。何时使用:当您想控制实例数目,节省系统资源的时候。优点:1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。2、避免对资源的多重占用(比如写文件操作)。缺点:没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面原创 2020-09-07 15:46:47 · 274 阅读 · 0 评论 -
【设计模式实践系列】应用责任链模式实现申请退款审批
责任链模式在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。意图:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请原创 2020-09-02 17:30:50 · 477 阅读 · 0 评论 -
【设计模式实践系列】桥接模式应用订单优惠价格计算
桥接模式桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。意图:将抽象部分与实现部分分离,使它们都可以独立的变化。主要解决:在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。何时使用:实现系统可能有多个角度分类,每一种角度都可能变化。优点: 1、抽象和实现的分离原创 2020-08-17 18:02:26 · 726 阅读 · 0 评论 -
【设计模式实践系列】策略模式应用订单折扣方案
策略模式策略模式指的是一个类的行为或其算法可以在运行时更改,在不同的场景中,有不同的实现算法。意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。主要解决:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为。优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。缺点:1、客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适原创 2020-08-17 16:13:34 · 903 阅读 · 0 评论 -
【设计模式实践系列】装饰者模式应用订单多重优惠计算
装饰者模式装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。主要解决:一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。何时使用:在不想增加很多子类的情况下扩展类。优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个原创 2020-08-10 16:51:31 · 862 阅读 · 0 评论 -
【设计模式实践系列】工厂模式应用创建不同类型的订单
工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式,这种类型的设计模式属于创建型模式,在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。...原创 2020-08-05 13:51:24 · 1005 阅读 · 0 评论 -
【设计模式实践系列】适配器模式应用不同支付接口的统一
适配器模式适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。意图:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。主要解决:主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的。何时使用: 1、系统需要使用现有的类,而此类的接口不符合系统的需要。 2、想要建立一原创 2020-08-04 10:53:00 · 1055 阅读 · 0 评论 -
【设计模式实践系列】建造者模式生成复杂的对象
建造者模式建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。主要解决:主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈原创 2020-08-03 17:17:07 · 396 阅读 · 0 评论