GOF23
Gosions
这个作者很懒,什么都没留下…
展开
-
观察者模式Observer
观察者模式 看一个类图: 这里我们订阅者可以称之为观察者,需要给订阅的报社称之为目标 核心: 观察模式主要用于 1:N的通知。当一个对象(目标对象Subject)的状态发生变化时,他需要及时告知一系列对象(观察者对象),令他们做出响应。 通知观察者的方式: 推:每次都会把通知以广播的形式发给所有观察者,所有观察者真能被动接收。 拉:观察只要知道有情况即可。至于什么时候获取内容,获取什么内容都自己决定 JAVASE提供了java.util.Obserable和java.util.Observ原创 2020-06-09 11:40:04 · 183 阅读 · 0 评论 -
动态代理
动态代理和静态代理角色一样 动态代理的代理类是直接生成的,不是我们直接写好的 动态代理可以分为两大类:基于接口的动态代理,基于类的动态代理 基于接口-----JDK动态代理【我们在这里使用】 基于类:cglib java字节码实现:javasist 需要了解两个类:Proxy:代理,InvocationHandler:处理 动态代理的好处: 可以使真实操作更加纯粹 公共也就交给代理角色!实现业务的分工 公共业务发生扩展的时候,方便集中管理 一个动态代理类代理的是一个接口,一般就是对应的一类业务 一个动.原创 2020-06-07 20:41:22 · 178 阅读 · 0 评论 -
享元模式(Flyweight)
场景:内存属于稀缺资源,不要随便浪费。如果有很多个相同或相似的对象,我们可以通过享元模式,节省内存。 核心:享元模式以共享的方式高效的支持大量细粒度对象的重用。 享元模式能做到共享的关键是区分了内部状态和外部状态 内部状态:可以共享,不会随环境变化而变化 外部状态:不可以共享,会随着环境变化而变化** ...原创 2020-06-07 12:10:52 · 159 阅读 · 0 评论 -
外观模式
基本介绍: 外观模式(Facade)也叫“过程模式”:外观模式为是子系统的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 外观模式通过定义一个一致的接口,用于屏蔽内部子系统的细节,使得调用端只需要跟这个接口发生调用,而无心关心这个子系统的内部细节 先来看一看类图: 我们的子系统集聚合了外观类,而我们的客户端直接找外观类即可。 原理类图的说明(外观模式的角色分析): 外观类(Facade):为调用端提供统一的调用接口,外观类知道哪些子系统负处理责请求,原创 2020-06-05 11:27:50 · 176 阅读 · 0 评论 -
静态代理模式
为什么要学习代理模式?因为这就是SpringAOP的底层! 代理模式的分类: 静态代理 动态代理 静态代理 角色分析: 抽象角色:一般会使用接口或抽象类来解决 真实角色:被代理的角色 代理角色:代理真实角色,代理真实角色后,我们一般会做一些 客户:访问代理对象的人 代码步骤: 接口 //租房 public interface Rent { void rent(); } 真实角色 public class Host implements Rent { @Overri原创 2020-05-30 10:21:27 · 196 阅读 · 0 评论 -
桥接模式
桥接模式是将抽象部分与它的实现部分分离,使他们都可以独立变化他是一种对象结构型模式又称为柄体模式(Handle and Body) 或接口模式 看图: 这是一个多继承的关系,加我们再来一个小米电脑,那我们都要在每个电脑下加一个小米电脑。违反了我们的单一职责原则 我们先看代码演示: 定义一个品牌接口 //品牌 public interface Brand { void info(); } 写一个苹果品牌 //苹果品牌 public class Apple implements Brand.原创 2020-05-29 15:35:47 · 130 阅读 · 0 评论 -
适配器模式
先来聊一聊结构性模式。 我们都知道创建型模式有五个:单例模式,工厂模式,抽象工厂,原型模式,建造者模式 那结构型模式有七个:适配器模式,桥接模式,装饰模式,组合模式,外管模式,享元模式,代理模式。 我们先来看一看适配器模式吧 比如一个USB转换接口,我们笔记本必须要插入转换器。 如图: 现在大脑里应该有三个类了,一个网线接口类,一个笔记本类,还有一个USB转换类 先看代码: 先来写一个网线的类 public class Adaptee { public void request(){原创 2020-05-28 19:18:14 · 155 阅读 · 0 评论 -
建造者模式
建造者模式也属于创建型模式,它提供了一种创建对象的最佳方式。 定义:将一个复杂的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 主要作用:在用户不知道 对象的建造过程和细节 的情况下就可以直接创建复杂的对象。 用户只需要给出指定复杂对象的类型和内容,建造者模式复杂按顺序 创建复杂对象(把内部的建造过程和细节隐藏起来) 案例: 假设造房简化为如下步骤: 1.地基 2.钢筋工程 3.铺电线 4.粉刷 如果要盖一座房子,首先找一个建筑公司或工程承包商(指挥者),承包商指挥工人..原创 2020-05-28 16:40:43 · 191 阅读 · 0 评论