责任链模式
摘要:介绍 客户端发出一个请求,链上的对象都有机会来处理这一请求,而客户端不需要知道谁是具体的处理对象; 让多个对象都有机会处理请求,避免请求者和接收者之间的耦合关系; 有两个核心点:处理请求,将请求传递到下一个节点。 应用场景 Tomcat对encoding编码处理,SpringBoot里面的拦截器、过
阅读全文
观察者模式
摘要:观察者模式 定义对象间一种一对多的关系,使得当一个对象改变状态,则所有依赖于它的对象都会得到通知,并 自动更新,也叫发布订阅模式Publish/Subscribe,属于行为模型。 应用场景 消息通知:邮件通知、广播通知、微信朋友圈; 当一个对象改变的同时需要改变其他对象,此时可以考虑观察者模式。 角
阅读全文
模板方法模式
摘要:介绍 定义一个操作中的算法骨架,将算法一些步骤延迟到子类中,使得子类可以在不改变算法结构的情况下重新定义 该算法的某些特定步骤,属于行为模式。 应用场景 javaweb中的servlet,HttpService类提供了一个service()方法; 有多个子类共有逻辑相同的方法,可以考虑作为模板方法;
阅读全文
策略模式
摘要:策略模式 定义一系列算法将它们封装起来,并且可以相互替换; 使用场景 java awt的布局管理器; 如果一个系统有许多类,它们之间的区别仅在于它们的行为,那么可以使用策略模式; 角色 context上下文:屏蔽高层模块对策略算法的直接访问,封装可能存在的变化; strategy:抽象策略角色,对策
阅读全文
享元模式
摘要:介绍 属于结构型模式,主要用于减少创建对象的数量,以减少内存占用和提高性能; 享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。 应用场景 java中的String,如果字符串常量池有则返回,没有则创建一个字符串保存在常量池中; 数据库连接池、线程池等; 如果系统中有大量相似的对象
阅读全文
装饰器模式
摘要:介绍 装饰器模式也叫包装者模式,属于结构型模式,它作为现有类的包装,允许向一个现有对象添加新的功能, 同时也不改变其结构。 给对象添加功能,有两种方式:继承或则关联组合,讲一个类的对象嵌入另一个对象中,由另一个对象决定 对嵌入对象的行为来增强功能,这个是装饰器模式,比继承模式更加灵活。 应用场景 以
阅读全文
组合模式
摘要:介绍 组合设计模式又叫部分整体模式,将对象组合成树形结构以表示“部分-整体”的层次结构,可以更好地实现管理操作; 组合模式使得用户可以使用一致的方法操作单个对象和组合对象; 部分-整体对象的基本操作多数是一样的,只有部分不一样; 核心:组合模式可以使用一颗树来表示。 应用场景 银行总行,总行有前台、
阅读全文
桥接模式
摘要:桥接模式 将抽象与实现分离,使得他们可以独立的变化; 通俗来说,通过组合来桥接他们的维度或行为; 优点 抽象和实现的分离; 优秀的扩展能力,符合开闭原则。 缺点 增加系统设计和理解难度; 使聚合关系建立在抽象层,要求开发者对抽象进行设计与编程。
阅读全文
适配器模式
摘要:适配器分类 接口的适配器 适配的目标是接口,具体实现是创建一个Adapter抽象类,去实现目标接口,方法空实现。客户端根据需要实现需要的方法即可。 类的适配器 适配的目标是类,具体实现方式是针对原来的类OldClass,创建目标接口Target,创建Adapter类继承OldClass,并实现Tar
阅读全文
建造者模式
摘要:实现细节 决策者(根据建造者类型产生具体产品,相同的创建过程创建不用的产品)、抽象建造者、具体建造者、产品 建造者模式优点 1)客户端无需知道产品内部的构建细节,将产品本身与创建过程解耦; 2)每一个具体建造者都相对独立,与其他建造者无关,可以更加精细的控制产品的创建过程; 3)增减新的建造者无需修
阅读全文
抽象工厂模式
摘要:工厂方法模式和抽象工厂模式 当抽象工厂模式的一个产品类只创建一种产品对象时,工厂方法模式退化为工厂方法模式。 抽象工厂模式优点 减少类的数量,一个产品族的类可以产生一系列产品,减少工厂类的数量。 抽象工厂模式缺点 产品族扩展困难,要增减某一系列的某一产品,需要修改抽象工厂与产品的代码,不符合开闭原则
阅读全文
工厂方法模式
摘要:优点 1)符合开闭原则,增加一个产品类,只需要增加一个产品类和具体的工厂类; 2)符合单一职责原则,每个工厂只负责生产对应的产品; 3)使用者只需要知道产品的抽象类,无需关心其他实现类,满足迪米特里原则、依赖倒置和里氏替换原则。 缺点 1)每增加一个产品需要增加产品类和工厂类; 2)每个产品需要具体
阅读全文
单例设计模式
摘要:应用场景 1)整个业务系统只使用一个redis连接、发号器; 2)SpringIOC容器中的bean; 3)sptringboot中的Controller、service、dao层中通过@Autowire注入的对象默认都是单例的。 分类 懒汉:jvm启动时,该对象还没有创建,在使用时才会创建,即延迟
阅读全文
设计模式分类
摘要:创建型模式 提供了一种创建对象的同时隐藏创建逻辑的方式,使得程序在判断针对某个实例需要创建哪些对象时更加灵活。 常用:工厂模式、抽象工厂模式、单例模式、建造者模式; 不常用:原型模式。 结构型模式 关注类和对象的组合,继承的概念被用来组合接口和定义组合对象获得新功能的方式。 常用:适配器模式、桥接模
阅读全文
设计模式的六大原则
摘要:单一职责 1)一个类只负责一个功能领域中的相应职责,就一个类而言,应该只有一个引起它变化的原因; 2)是高内聚、低耦合的指导方针。 高内聚: 1)尽可能类中每个成员方法只完成一件事情; 2)模块内部的代码,相互之间的联系越强,内聚就越高,模块的独立性就越好; 低耦合: 减少类内部一个成员方法调用另一
阅读全文
观察者模式在源码中的使用
摘要:观察者模式定义对象间的一对多关系,当被观察者的状态发生改变时,所有观察者都会得到通知并进行相应操作。 下图是被观察的属性及方法: 下图是观察者: 在源码中的应用: 1.ContextLoaderListener继承servletContextListener,可以看出ContextLoaderLis
阅读全文
抽象工厂模式在源码中的使用
摘要:抽象工厂模式定义了创建一组具有相互依赖关系对象的接口,针对多产品族,多产品等级结构。 1.比如java.sql.Connection就采用抽象工厂模式 Connection接口源码如下所示,其定义了Statement、PreparedStatement、CallableStatement三个产品等级
阅读全文
工厂方法模式在源码中的应用
摘要:工厂方法模式是指定义一个创建对象的接口,对象的创建交由子类实现。 在源码中的应用: 1.ArrayList的iterator 其中Iterator是抽象产品,itr是具体产品,collection是抽象工厂,ArrayList是具体产品。 2.URLStreamHandler类 URLStreamH
阅读全文
策略模式的应用
摘要:实现案例选择不同的通道发送短信,基于springboot实现。 SmsService接口,定义了两个方法,发送短信和选择通道。 public interface SmsService { //有两种发送通道 /** * 发短信 */ void sendSms(); /** * 选择发送通道 * @r
阅读全文