随笔分类 - Java设计模式
摘要:一、EventBus概述 Guava 事件总线EventBus允许在服务内部的组件之间进行发布-订阅式的通信,是观察者模式的优雅实现。观察者模式和EventBus都需要注册监听者事件,发布者发布事件。 不同在于观察者模式的发布者需要继承Observable,实现事件发布的逻辑,监听者需要自己实现Ob
阅读全文
摘要:策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改,在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法 比如在一个可变流程中,每个流程都是独立互不影响的,我们想任意替换流程中
阅读全文
摘要:外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个可以访问,并且屏蔽了系统复杂性的接口。它向现有的系统添加一个接口,来隐藏系统的复杂性。 这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用 场景:邮寄信件的过程,每个需要寄信的人,都需要
阅读全文
摘要:装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构,这种模式的实现有两种 实现1、通过继承原有的类,在保证父类原有功能的基础上,提供额外的功能 实现2、创建一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。 场景:将旧
阅读全文
摘要:命令模式(Command Pattern)把请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象A,并把该命令传给相应的N个对象,由N个对象去执行命令。 命令模式主要解决在某些场合中,命令发布者和N多命令执行者的耦合关系。比如在项目实施过程中,客户同时通知SA修改需求
阅读全文
摘要:桥接模式(Bridge Pattern)是用于把抽象化与实现化解耦,使得二者可以独立变化,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦 桥接模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响 场景: Company抽象:XX公司的盈利模
阅读全文
摘要:适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁,它结合了两个独立接口的功能。适配器将一个接口的实现,转换成兼容另外一个实现的接口功能 场景:通过一个适配器Adaper,将一个老的OldOutput电流接口实现的220V输出,转换成新的TargetOutput电流接口实现
阅读全文
摘要:当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式 场景:学生1和2观察等待着老师布置作业,老师通过微信布置完作业,学生1和2便同时接收到了通知,但学生1决定再看会电视,学生2决定马上写作业 在
阅读全文
摘要:在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行 场景:总部设计的宝马车的模型模板,由各个分厂去根据抽象方法实现不同的车型,比如车的启动有多种不同实现,车的喇叭系统有多种不同实现,车的导航
阅读全文
摘要:责任链模式主要包含以下角色。 抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接。 具体处理者(Concrete Handler)角色:实现抽象处理者的处理方法,判断能否处理本次请求,如果可以处理请求则处理,否则将该请求转给它的后继者。 客户类(Client)角
阅读全文
摘要:代理模式 一、概述 代理是一种模式,提供了对目标对象的间接访问方式,即通过代理访问目标对象。如此便于在目标实现的基础上增加额外的功能操作,前拦截,后拦截等,以满足自身的业务需求,同时代理模式便于扩展目标对象功能的特点也为多人所用。 二、图形描述 三、静态代理 静态代理的实现比较简单,代理类通过实现与
阅读全文
摘要:概述 单例模式是Java中常见的设计模式,常见的单例模式有三种实现方式:懒汉式,饿汉式,改进型的懒汉式。 单例模式的特点是: (1)单例模式只能有一个实例,并且不能被外部实例化 (2)单例模式必须自己创建自己的唯一实例 (3)单例模式必须对其他对象共享自己的唯一实例 懒汉式实现 饿汉式实现 懒汉式和
阅读全文
摘要:概述 工厂模式提供了创建对象的最佳模式,它使用统一的接口来指向新建的对象,屏蔽了创建对象的逻辑。 工厂模式主要分为三种:(1)简单工厂 (2)工厂方法 (3)抽象工厂 简单工厂 简单工厂的实现比较简单,即工厂类中主要有个静态方法,用来接收传进来的参数,并根据参数的不同返回不同类的实例对象。 假设有一
阅读全文