分类: 设计模式

19 篇文章

十、享元模式
Flyweight 定义 共享存储单元,节约内存空间。 使用场景 例如文本编辑器里,每个字符都有字体大小,显示颜色,背景颜色等属性。将这些属性抽取为字体,每个字体的属性在内存中只保留一份即可。感觉和CSS挺像的,不过享元模式侧重点不是代码复用,而是对象复用。 JDK里使用的地方 Integer缓存 int类型在自动装箱时,调用java.lang.I…
九、原型模式
Prototype Design Pattern 适用场景 创建对象过程复杂,消耗性能。但内存中已有一个对象,且字段差不多,可采用复制该对象来使用,注意深拷贝、浅拷贝。 原型模式注重的是思想,Beanutils就是原型模式的经典实现。
thumbnail
八、建造者模式
建造者模式 适用场景 创建对象的参数很多 如果参数为非必填的话,可以使用set方法,必填的通过构造方法传入,并进行校验。但是必填项很多时,构造方法的参数列表就很臃肿了。 属性之间有依赖关系 参数过多时使用set方法传入,依赖关系校验就不可控了。因为对象已经创建好了,无法控制对象使用前,是否执行了set方法。 示例 public class Reso…
thumbnail
六&七、工厂模式
工厂模式 作用 唯一的职责就是创建对象,将复制的创建过程,获取对象的逻辑与对象的使用进行解耦。 分为简单工厂、工厂方法、抽象工厂。 简单工厂 对象获取逻辑复杂时,例如根据文件类型获取对应的解析器,解析器有很多,就需要在使用对象前,进行臃肿的逻辑判断,才能获取对应的解析器对象。造成获取对象与使用对象耦合,不好扩展。后续新增解析器,又得在获取对象那里添…
thumbnail
五、装饰器模式
装饰器模式 定义 通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。 实现方式 IA 需要增强的功能,对应的接口 public interface IA { void func(); } A 待增强的类 public class A implements IA { @Override public void func() { } } A…
thumbnail
四、观察者模式
观察者模式 定义 在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会自动收到通知。 实现方式 可分为阻塞、非阻塞,根据业务场景决定使用哪种。 基础版本 IObserver 观察者接口 public interface IObserver { // 模板模式 default void updateWraper(Message…
thumbnail
三、责任链模式
责任链模式 定义 在职责链模式中,多个处理器依次处理同一个请求。一个请求先经过 A 处理器处理,然后再把请求传递给 B 处理器,B 处理器处理完后再传递给 C 处理器,以此类推,形成一个链条。链条上的每个处理器各自承担各自的处理职责,所以叫作职责链模式。 在 GoF 的定义中,一旦某个处理器能处理这个请求,就不会继续将请求传递给后续的处理器了。当然…
thumbnail
二、适配器模式
适配器模式 定义 适配器模式的英文翻译是 Adapter Design Pattern。顾名思义,这个模式就是用来做适配的,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。 一般来说,适配器模式可以看作一种“补偿模式”,用来补救设计上的缺陷。应用这种模式 算是“无奈之举”,如果在设计初期,我们就能协调规避接口…
thumbnail
一、单例模式
解决的问题 有些数据在系统中只应该保存一份,比如系统的配置信息类 资源访问冲突的问题,比如多个logger写入同一个日志文件 几种实现方式 饿汉式 静态成员变量,类加载时实例化 线程安全 不支持延迟加载 public class HungryManDemo { private static final HungryManDemo instance …