随笔分类 - 趣味设计模式系列
用精简的例子阐述设计模式,并仿造源码手写经典源码中的常用设计模式,有图、有漫画、有故事、有源码分析和总结,让技术不再枯燥乏味。
发表于 2022-03-02 22:35阅读次数:593评论次数:0
摘要:1. 简介 组合模式(Composite Pattern):将对象组合成树形结构以表示部分-整体的层次关系。 2. 示例 假设要设计一个文件系统的目录,需要灵活的在某个目录下添加、删除目录或文件,统计指定目录下的文件个数,计算指定目录下的文件大小。 设计类图如下: 抽象类Node package c
阅读全文 »
发表于 2020-09-13 08:22阅读次数:358评论次数:0
摘要:1. 简介 装饰器模式(Decorator Pattern):动态地给一个对象添加职责,就增加功能来说,装饰器比生成子类更灵活。 2. 示例 水果店需要给网上客户发货,除了包装之外,需要对特定水果包装加额外装饰,比如加防伪标志、加固、加急等额外功能,但在外部看来还是打包组件。 类图设计 水果包装接口
阅读全文 »
发表于 2020-09-07 07:06阅读次数:496评论次数:0
摘要:1. 简介 访问者模式(Visitor Pattern):表示一个作用在某对象结构中的元素的操作,它可以在不改变类的元素的前提下,定义作用于这些元素的新操作。这是《设计模式-可复用面向对象软件的基础》中的定义。换句通俗的话,就是类的结构元素不变,可以根据访问者重新定义元素的操作。 2. 示例 2.1
阅读全文 »
发表于 2020-09-02 06:31阅读次数:823评论次数:0
摘要:1. 简介 ASM是assemble英文的简称,中文名为汇编,官方地址https://asm.ow2.io/,下面是官方的一段英文简介: ASM is an all purpose Java bytecode manipulation and analysis framework. It can b
阅读全文 »
发表于 2020-08-24 21:47阅读次数:597评论次数:0
摘要:1. 图解 上图主要描述了Cglib动态代理的主要执行过程,下面做详细分析,以下源码使用的Cglib版本为3.2.12。 2. Enhancer源码分析 public Object create() { // 判断是否需要创建对象,false表示需要创建对象 classOnly = false; /
阅读全文 »
发表于 2020-08-13 09:12阅读次数:515评论次数:0
摘要:1. 图解 上图主要描述了JDK动态代理的执行过程,下面做详细分析。 2. Proxy源码分析 上一篇,在使用JDK动态代理的时候,借助于Proxy类,使用newProxyInstance静态方法,创建了动态代理对象,这个方法接收三个参数,分别是目标类的类加载器、目标类实现的接口数组、自定义的Inv
阅读全文 »
发表于 2020-08-09 22:33阅读次数:974评论次数:0
摘要:1. 简介 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问。简而言之,既能使被代理对象无入侵,又能附加代理自己的操作,使方法增强功能。 2. 图解 水果店代理销售海南芝麻蕉,此外还销售苹果、橘子等其他水果。 代理的主要实现技术与方法如下图所示,本篇主要讲静态代理
阅读全文 »
发表于 2020-05-06 23:18阅读次数:559评论次数:0
摘要:1. 简介 策略模式(strategy):定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。 2. 图解 商城搞多种优惠活动,顾客只能参与其中一种优惠算法。 3. 案例实现 类图 满200减20元; 首次购买减20元; 第二件打9折; 节日一律减5元. 代码实现如下,环境类 折扣接口类 满
阅读全文 »
发表于 2020-02-14 11:09阅读次数:464评论次数:0
摘要:1. 简介 单例模式(Singleton):确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 2. 图解 类图如下: 3. 案例实现 单例特点: 外部类不能随便对单例类创建,故单例的 ,在类的内部自行实例化; 提供一个 ,作为唯一调用单例类的途径得到实例。 3.1 饿汉式 执行结果
阅读全文 »
发表于 2020-01-05 00:13阅读次数:528评论次数:2
摘要:1. 简介 状态模式(State Pattern),当一个对象内在 时允许其 ,这个对象看起来像改变了其类。简而言之,就是 。 2. 图解 下图四辆汽车,分别代表汽车日常的四种状态。 开门状态: 关门状态: 飞奔状态: 停止状态: 其中,某种特定状态下,都有四个可执行操作,分别是open,close
阅读全文 »
发表于 2019-10-21 22:37阅读次数:388评论次数:0
摘要:1. 简介 观察者模式(Observer Pattern),也叫做发布订阅模式(Publish Subscribe),它定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。 2. 图解 水果店进口水果销量良好,特别是进口蛇果,目前还没到货,有几个女
阅读全文 »
发表于 2019-09-22 23:21阅读次数:1361评论次数:0
摘要:1. 简介 责任链模式(Chain of Responsibility):使 都有机会处理请求,从而避免了请求的 和`接受者 耦合`关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。 2. 图解 商城新开张,每个订单,可以享受多张优惠券叠加减免 责任链模式 3. 案例实现 类
阅读全文 »