设计模式
文章平均质量分 64
吖土豆
太阳再远,踮起脚尖也可以靠近阳光。
展开
-
Java设计模式之访问者模式
这是一个比较复杂且初理解比较困难的模式,先举个例子,帮助理解这个模式。例子: 无人机群表演的例子,想让无人机群组合成不同的形状,不需要换一批无人机,我们只需要改变无人机群的代码就可以了,不用改变无人机的硬件(高度器和方向器),输入不同的代码,无人机就可以做不同的动作。定义: 封装一些作用于某种数据结构(无人机硬件)的各元素(高度器)的操作(高低),它可以在不改变数据结构的前提下定义作用于这些元素的新的操作(代码)。这个例子中,【数据结构】:无人机或无人机硬件;【各元素】:高度器和方向器;【操作】:飞多高或者原创 2022-12-09 12:18:37 · 159 阅读 · 0 评论 -
Java设计模式之建造者(生成器)模式
使用建造者模式,相当于有个机器帮你拼,机器人各个部位的拼法内部已经写好了,你只需要点击拼手臂,机器就把手臂拼好了,使用者不需要知道内部到底怎么拼的。建造者模式和模板方法模式长的很像,其中同样的构建过程可以创建不同的表示,用到了模板方法模式的思想,因为拼大黄蜂或者擎天柱,构建过程是一样的,都是拼胳膊、拼脑袋等等。:环境类,建造者的使用者。将一个对象复杂的构造过程,拆分成若干个的简单过程,让其使用者可以轻松的完成对这个对象的构建。:机器人抽象建造者,将机器人复杂的组装过程分解,并将机器人的构建与具体表示分离。原创 2022-12-08 15:14:28 · 260 阅读 · 0 评论 -
Java设计模式之享元模式
是池化技术的重要实现,主要用于创建大量相似对象时,减少对象的创建,减少内存占用和资源的重复利用,提高性能。这些对象有些公共特征,如需要大量创建、生命周期短用完即弃、对象之间存在部分相同数据,这个时候就可以考虑使用享元模式。举个例子,最近有本书火了,很多人都想看,于是就花钱买了(new对象),但看完学到知识后这本书就没用了,会被垫桌脚或丢弃(gc垃圾回收),这样就导致金钱和资源的浪费。如果图书馆有这本书,大家轮流去借这本书看,看完再还回去,这就提高了资源的重复利用,并且也不会造成金钱的消耗(new对象造成的性原创 2022-12-07 16:10:12 · 231 阅读 · 0 评论 -
Java设计模式之模板方法模式
将一个算法中的特定步骤延迟到子类中,使得不改变算法结构的情况下自定义步骤内容。比如做法的步骤为放油、放菜、放盐、装盘,这些步骤可以自己DIY,但顺序不能乱,必须是先放油再放菜。也就是父类把做法的步骤顺序框架定好了,子类只需要在这个框架中将步骤实现就可以了。模板方法模式非常简单,就是使用了Java的继承机制:模板抽象类,其中放油、放菜等步骤需要子类实现,doCookie方法为算法的结构,需要用final修改,不允许更改。四、优缺点优点:缺点:原创 2022-12-07 13:23:16 · 109 阅读 · 0 评论 -
Java设计模式之责任链模式
这个模式使得每一个请求处理者都有机会处理请求。将这些处理者连成一条链,请求再这条链上传递,直到有处理者处理它为止。这样说还是有点抽象。举个例子,请假制度,3天内的假,项目经理就可以批;请假3到7天,需要部门主管批;请假半个月,需要老板批。请假条就在这条链上传递,直到可以批的处理者。:处理者的抽象类。具体的处理者只需要实现处理逻辑的代码。根据请假的天数判断是处理还是给下一个处理者。执行结果:双亲委派模型: 利用责任链模式的思想,将一个类的加载先交给父类加载,父类加载不了自己再加载。SpringMvc拦截器链原创 2022-12-07 12:36:00 · 141 阅读 · 0 评论 -
Java设计模式之策略模式
定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。策略模式是一种行为型模式,将类的行为独立出来,用于if…else if 比较多的场景,避免传统if判断导致的维护性变差的情况。以线程池拒绝策略为例子,线程池如果阻塞队列满了,需要拒绝一些任务,以拒绝任务为目的,制定一组策略,每个策略以不同的方式拒绝任务。在用的时候可以从中任意选择一个,增删扩展也不会影响到线程池本身。例子:商品价格打折策略,双十一全部7折,店庆全部5折,晚间打9折。:上下文/环境类,可以理解成应用策略的地方,比如店家的收银电原创 2022-12-06 16:29:49 · 190 阅读 · 0 评论 -
Java设计模式之状态模式
定义: 当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类。在这个模式中,一个类的行为是根据状态改变而改变的。比如下午做什么是根据心情状态改变的,心情好出去玩,心情不好就宅家,同样是做什么,心情状态不同,干的事情就不一样。而且它可以内部的切换状态,比如心情不好下午宅家,宅到一半彩票中了五万,心情状态变好了,然后就出去Happy了。这也是和策略模式的不同之一,策略模式的行为一旦确定就不能改变了。下面就以工单流转的例子细说。运行结果:我们可以发现除了初始化时赋值了具体流程,在之后的工单流转中原创 2022-12-06 14:14:42 · 746 阅读 · 0 评论 -
Java设计模式之外观模式
将一组复杂的接口调用封装,提供一个简单的外观接口,对于调用者来讲只需要简单的调用这个接口就可以了,复杂的操作都隐藏起来。例如,我们下班回家时只要打开门或说一个命令,就可以自动的打开灯、打开电视等等…四、和适配器比较意图不同。外观模式的意图是简化接口,而适配器的意图是将接口转换成不同的接口优点:缺点:原创 2022-12-06 13:07:50 · 183 阅读 · 0 评论 -
Java设计模式之适配器模式
定义: 将一个类的接口变成另一个类所期待的另一个接口,从而使因接口不匹配而无法一起工作的两个类能够一起工作。举个例子,苹果手机想用type-c的充电器充电,但充电的口不吻合,所以就需要一个转接头,使type-c能给苹果手机充电。这就是适配器。SpringMvc中因为handler有三种实现方式(implements Controller、implements HttpRequestHandler、@RequestMapping),要执行这三种handler的话,需要对应适配器才行。这就是接口适配器模式的实际原创 2022-12-06 10:02:55 · 246 阅读 · 0 评论 -
Java设计模式之装饰器模式
在类原有功能的基础上扩展功能。比如字节流转字符流,字符流就相当于是装饰器,在字节流原有的基础之上扩展功能。四、与代理模式的区别(似我非我,本质不同)代理模式: 相当于外卖小哥代客户买肯德基,但外卖小哥并不是客户,只是委托另一个角色去完成你不想干的事。从代码中举例,Spring事务控制,代理模式把开启、关闭、提交、回滚等非业务操作交给代理类去做,但这个代理类不能当成真正的业务类,真正吃肯德基的核心业务还是要被代理类本身来做。装饰器模式: 相当于外卖小哥给自己点了份肯德基,他本身就是客户,做跑腿的事,也做吃原创 2022-12-05 15:55:30 · 127 阅读 · 0 评论 -
Java设计模式之三大工厂模式
一个实例的创建细节由工厂类决定,使用者只需要给工厂说我要什么东西就可以了。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。我们需要创建一个安卓手机工厂,根据传入的品牌名,返回对应的安卓手机。三、优缺点优点:== 缺点:==在简单模式中,生产的都是同一个大类下的实例,这就导致能生产的实例的类型有限。已有生产安卓手机的工厂,如果还想生产苹果手机,再加一个工厂要比修改安卓手机工厂要好很多。所以工厂方法模式的本质就是多个工厂,每个工厂生产对应原创 2022-12-05 12:23:50 · 122 阅读 · 0 评论 -
Java设计模式之单例模式
确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。原创 2022-12-02 13:39:56 · 99 阅读 · 0 评论 -
Java设计模式之观察者模式
在这个模式中,有观察者和被观察者两个角色,当被观察者的状态发生改变时,要让所以观察它的观察者知道这个改变。举个例子,Redis的某个key过期了,需要通知一些对象这个key过期了,需要做一些业务操作。其中redis就是被观察者,一些对象就是观察redis的key过期的观察者。原创 2022-12-02 09:58:20 · 572 阅读 · 0 评论