设计模式
文章平均质量分 79
我是坑货
这个作者很懒,什么都没留下…
展开
-
Java函数式编程
函数式编程是程序面向数学的更底层的抽象,将计算过程描述为表达式。简单点讲就是,函数内部涉及的变量都是局部变量,不会像面向对象编程那样,共享类成员变量,也不会像面向过程编程那样,共享全局变量。同样的入参,不管怎么执行,得到的结果都是一样的。Functional Programming 函数式编程,这里的函数类似于一个表达式,类似我们学习中的数学公式,输入端是确定的,那输出端也是确定的,这种就是没有副作用的纯函数。面向对象的编程单元是类或对象,面向过程的编程单元是函数,函数式编程的编程单元是无状态函数。原创 2022-10-27 19:48:08 · 586 阅读 · 0 评论 -
设计模式:策略模式,模板模式,责任链模式
策略模式,模板模式,责任链模式这三个模式应该是框架中最常用,使用频率最高的设计模式,本身三者就是行为型设计模式,对比创建型设计模式,是用来创建对象,结构型设计模式是搭骨架这种,基本就是一个地方用到,别的地方就不会用了,或者是比较基础底层的。行为型设计模式本身就是为了解决我们业务逻辑扩展的一些痛点,比如说也复杂了,需要对应的设计模式来解决扩展性和优化逻辑,这个其实要比上面两者的情况更多。这边主要是分析回顾一下这三者。原创 2022-10-13 19:39:06 · 498 阅读 · 0 评论 -
设计模式:工厂模式和建造者模式
有时候甚至感觉传统的建造者模式,有时候特别像工厂模式,因为有时候我们会给建造者抽象类定义几个“模板”,这几个模板特别像工厂模式里面的。建造者模式,是自定义的模式,也许我就一个实现类ConcreateBuilder,但是里面参数我自己往里面塞,我可以理论上有无数种类型的。但是这种方式特别像我们常看到的一些比较肤浅的关于设计模式的文章,我们通过去记结构去记名字,实际上区分不出来什么,因为设计模式很多结构差不多,而且实际中最佳范例或者源码里面也不会标出这些,命名不规范这些。对比工厂模式和建造者模式。原创 2022-10-08 11:29:30 · 1187 阅读 · 0 评论 -
设计模式:中介模式
Observer定义了一对多(one-to-many)的依赖关系, Mediator封装了多个对象互相之间的交互方式. Oberver定义了单向的订阅关系, Mediator通过引入中间件的方式解决多个对象之间混乱的依赖关系与通信方式.中介模式听名字作为中介,在复杂的调用关系中做个中介传递(类似于在状态机中弄一个中心点,所有的关系状态转移交给中介来处理),同样也是一个重在实用意义,实现结构倒是不要求什么,实际上结构跟观察者比较像。中介模式定义了一个单独的(中介)对象,来封装一组对象之间的交互。原创 2022-09-23 11:07:54 · 309 阅读 · 0 评论 -
设计模式:解释器模式
比如“ 8 3 2 4 - + * ”这样一个表达式,我们按照上面的语法规则来处理,取出数字“8 3”和“-”运算符,计算得到 5,于是表达式就变成了“ 5 2 4 + * ”。然后,我们再取出“ 5 2 ”和“ + ”运算符,计算得到 7,表达式就变成了“ 7 4 * ”。最后,我们取出“ 7 4”和“ * ”运算符,最终得到的结果就是 28。解释器模式也是一个意义用途大于结构,实现方式不固定,并且实际用的并不多,具体一个实现是规则引擎,但是现在有开源或者比较成熟的规则引擎方案。原创 2022-09-22 10:52:52 · 130 阅读 · 0 评论 -
设计模式:命令模式
其实这个应该挺好理解的,可以跟工厂模式,策略模式做个对比,工厂模式注重的是创建不同的对象,毕竟是创建型设计模式。适配器,代理,装饰器,桥接,: 他们的共同点是:对方法的增强 不同点: 适配器模式的作用是"适配",通常用于适配不同的组件,新旧系统。都是为了实现排序 命令模式中不同的命令具有不同的目的,对应不同的处理逻辑,并且互相之间不可替换 而简单工厂更侧重返回一个创建的对象。单例模式和享元模式,缓存,静态工厂方法: 他们的共同点是:对象的复用 不同点: 应用享元模式是为了对象"共享使用",节省内存。原创 2022-09-21 11:33:48 · 161 阅读 · 0 评论 -
设计模式:快照模式
第二,快照本身是不可变的,理论上讲,不应该包含任何 set() 等修改内部状态的函数,但在上面的代码实现中,“快照“这个业务模型复用了 InputText 类的定义,而 InputText 类本身有一系列修改内部状态的函数,所以,用 InputText 类来表示快照违背了封装原则。快照模式是一种行为模式,行为模式可以说是设计模式最大头的一部分,作为行为的解耦,相比于创建型,结构型,实际上不改架构的单纯做业务我觉得行为模式更多一些,搭配别的模式花样更多。备忘录模式是如何做到不违背封装原则的?原创 2022-09-20 11:53:47 · 530 阅读 · 0 评论 -
设计模式:访问者模式
尽管 Java 支持函数重载,但 Java 设计的函数重载的语法规则是,并不是在运行时,根据传递进函数的参数的实际类型,来决定调用哪个重载函数,而是在编译时,根据传递进函数的参数的声明类型(也就是前面提到的编译时类型),来决定调用哪个重载函数。在对象结构的一次访问过程中,我们遍历整个对象结构,对每一个元素都实施accept方法,在每一个元素的accept方法中回调访问者的visit方法,从而使访问者得以处理对象结构的每一个元素。执行对象的哪个方法,根据方法参数的运行时类型来决定。访问者者模式的英文翻译是。原创 2022-09-19 11:57:04 · 235 阅读 · 0 评论 -
设计模式:迭代器模式
迭代器模式(Iterator Design Pattern),也叫作游标模式(Cursor Design Pattern)这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。迭代器模式属于行为型模式。原创 2022-09-15 11:16:10 · 175 阅读 · 0 评论 -
设计模式:责任链模式
责任链模式是一种挺特别的模式,模板和策略一个是通过抽象父类一个听过接口实现来匹配对应的方案不同,责任链搞了一个长链,对应的多种方案都在这个责任链上。当然有的地方也把责任链叫做职责链,我这边感觉责任链特别顺嘴。责任来在GoF里面的定义:it.就是最起码超过一个可能会处理解决的请求的一堆对象,将他们链在一起来解决。直到这个请求被这个链条上的一个对象能处理为止。在职责链模式中,多个处理器(也就是刚刚定义中说的“接收对象”)依次处理同一个请求。原创 2022-09-13 16:22:43 · 424 阅读 · 0 评论 -
设计模式:策略模式
结构很简单:策略的接口,一堆对应策略接口的实现类}@Override//具体的算法...}}@Override//具体的算法...}}原创 2022-08-29 14:27:16 · 213 阅读 · 0 评论 -
设计模式:模板模式
每一个继承这个类的子类都要按照这个“模板”里面的“骨架”去实现具体的逻辑,每一个不同的子类,虽然是不同逻辑但大家的“骨架”结构是相同的,做到了“合而不同”,这也就体现了模板模式的优点:复用。除此之外,抽象类里可以有具体实现的方法,这些非抽象方法,可以在不修改这个代码结构的同时,让子类获取新的功能,同理父类扩展子类,子类也可以反过来扩展父类的方法,去自定义定制化一些东西。这里面复用体现最明显的是read方法,这里面第一个read是抽象方法,是需要子类自己去实现的,剩下的两个具体实现方法,其子类可以直接调用。.原创 2022-08-27 16:28:10 · 694 阅读 · 0 评论 -
设计模式:享元模式
这个设计模式享元模式,听名字的意思就是共享的单元,但是他的英文名称挺有意思的叫做“flyweight”,蝇量级拳手这个也挺有意思的,实际就是做一个共享的模块,里面是我们常用的,而且可以帮助我们减少创建对象,更好的节省资源,把重量级的活缩减成蝇量级的活。具体的例子,其实就是线上棋牌游戏,假设有很多个房间,每个房间都要有一副牌,牌的数量,花色,大小也就那些,假设我们玩的是一副扑克牌,一副扑克牌应该是54张,咱们完玩的是斗地主。不是的实际上,这个是包装类的优化,所谓的优化就是Integer类做了一个缓存。原创 2022-08-22 15:30:22 · 351 阅读 · 0 评论 -
设计模式:装饰模式
我们经常会遇见,一些不想改变接口,希望在接口上边“加强”,像是给个装饰品一样,在接口方法名字和参数都不变的情况下添加新的增强的部分。这就涉及到一个装饰模式。哪里装饰模式体现的做突出,那一定是Java的IO类。因为涉及到太多的实现和子类,如果单纯的通过继承,估计各个子类说句实在话,看组成部分,实际上装饰模式和代理模式差不多,都是四个部分。装饰模式与适配器模式有的地方会合在一起,叫做“包装模式”,但是实际二者互为逆操作。一个是我接口不变的条件下直接增强功能,比如说以前问你擅长什么,你只会“唱跳rap”,现在增强原创 2022-06-14 18:05:33 · 85 阅读 · 0 评论 -
设计模式:原型模式
这个原型模式是创建型模式,虽然和工厂单例什么的都是创建型模式,但是原型模式不一样,别的创建模式创建对象就是new一个构建一个对象。但是原型模式不一样,甚至我们用面向对象的编程语言像Java都不怎么用这个模式。原型模式,简单地说就是我有一个对象我要再建一个对象,我就克隆拷贝一个对象,而不是new。再举个例子我们有一个数据集合(bitmap 布隆过滤器,或者Map集合),现在要更新集合,怎么不间断呢,那就是拷贝一份集合,一个还是在应付业务,一个在更新,更新完拷贝的那一份去应付业务,旧的那一份不要,拷贝一份更新完原创 2022-06-13 23:14:16 · 86 阅读 · 0 评论 -
设计模式:桥接模式
桥接模式是结构型模式,也是一个看定义什么的,看起来比较蒙的一个模式。首先桥接模式有一个:这听起来好像懂了又不完全懂,咱们平时常见的桥接模式最佳实践:数据库连接池,还有一个sf4j日志。数据库连接池,很常见,不同的数据库厂家的数据库连接信息是不同的,数据库连接池是一个具体的,但是对应的连接方法有很多,采用哪种连接池肯定不是简单的if else,实际上就是连接方法的抽象,各家连接方法发的实现。sf4j日志的例子就更有意思,这是我看一个专栏,一个回复提到的,可以说桥接模式和sf4j说的非常明白:我这边的最简单原创 2022-06-09 22:11:39 · 342 阅读 · 1 评论 -
设计模式:代理模式
我们之前一直弄的单例,工厂,原型还有建造者模式,都是创建型模式,就是都是针对对象的创建来设计的。我们这边的代理模式是结构型模式,这种模式不用担心什么对象创建的,而是用来多个对象如何相互配合组成合适的结构来实现代码的解耦的设计模式,引入这个概念后,每当我们来一个新的设计模式都会说他属于什么类似的设计模式。这种设计模式类别一共就三种,前者我们常见的创建型设计模式,还有结构型设计模式和行为型设计模式。代理模式可以对比我们所说的中介或者说中间商,我们不用中间商可不可以买车,买房这些,那一定是可以的,但是由于我们受到原创 2022-06-08 19:40:38 · 150 阅读 · 0 评论 -
设计模式:再谈单例模式
单例模式可以说是每个人问设计模式都会脱口而出的几个设计模式之一,为什么之前写过一次了,现在我又写一遍。肯定不是重新写一遍怎么是设计模式。这次写的单例模式主要围绕的关键词有,延迟加载,高并发,线程安全,为什么说用枚举的单例模式优雅且怎么做到的。。。。借用争哥这个id生成器的例子:先来5个实现单例模式的方式(1)饿汉模式(2)懒汉模式(3)双重检测(4)静态内部类(5)枚举饿汉(我不管怎么样,我上来就new一个对象,不能饿着我)public class IdGenerator { p原创 2022-05-28 18:24:23 · 115 阅读 · 0 评论 -
设计模式:创建者模式(链式调用)
我们日常会遇到一些问题,比如一个对象有很多属性,比如订单,有很多属性订单号,订单日期,订单用户姓名,订单状态啥的,我们要构建一个这个样的对象,要不断的去set,get 如下:public class Order { private String orderNo; private Long orderId; private LocalDate confirmDate; private String templateId; private Integer ord原创 2022-05-19 15:28:14 · 922 阅读 · 0 评论