![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 94
极客挖掘机
一个来自十八线城乡结合部破写代码的,平时喜欢读读书、写写代码,从2019年开始运营有自己的个人公众号:极客挖掘机,想交流的朋友可以来公众号找我聊天。
展开
-
「补课」进行时:设计模式(22)——桥梁模式
1. 前文汇总「补课」进行时:设计模式系列2. 桥梁模式设计模式的最后一篇文章,还是让我这个拖延症晚期的患者把时间拖到了 2020 年的最后一天。虽然是最后一篇,但并不是最难的一个模式,比较复杂的两个模式已经在前面介绍过了,一个是访问者模式,另一个是解释器模式。那么什么是桥梁模式?2.1 定义桥梁模式(Bridge Pattern) 也叫做桥接模式, 是一个比较简单的模式, 其定义如下:Decouple an abstraction from its implementation so th.原创 2021-01-01 09:36:03 · 550 阅读 · 0 评论 -
「补课」进行时:设计模式(21)——享元模式
1. 前文汇总「补课」进行时:设计模式系列2. 享元模式2.1 定义享元模式(Flyweight Pattern)很简单,它解决的需求也很直接,同时它也是池技术的重要实现方式,先看下它的定义:Use sharing to support large numbers of fine-grained objects efficiently.(使用共享对象可有效地支持大量的细粒度的对象。)2.2 通用类图Flyweight 抽象享元角色:它是一个产品的抽象类, 同时定义出对象的外部状态和内部状.原创 2020-12-24 08:51:05 · 6834 阅读 · 0 评论 -
「补课」进行时:设计模式(20)——解释器模式
1. 前文汇总「补课」进行时:设计模式系列2. 解释器模式解释器模式这个模式和前面的访问者模式比较像,当然,我说的比较像是难的比较像,以及使用率是真的比较低,基本上没有使用的场景,访问者模式还有点使用场景,解释器模式,我们又不写解释器,这玩意 JVM 都帮我们实现掉了,哪用我们自己实现。常见的解释器有 JVM 为我们提供的 Java 语言的解释器,还有我们经常使用的 MySQL ,也有内置的 SQL 解释器。不过没用是没用,对应的模式我们还是可以学习一下。2.1 定义解释器模式(Interp.原创 2020-12-21 08:33:28 · 4184 阅读 · 8 评论 -
「补课」进行时:设计模式(19)——状态模式
1. 前文汇总「补课」进行时:设计模式系列2. LOL 中的状态感觉我天天在用 LOL 举例子,没办法,都已经 S11 了,而我依然在玩这个游戏。LOL 中的英雄有很多状态,有正常状态,有吃了伟哥一样的加速状态,有被对方套了虚弱的虚弱状态,还有被对方控制的眩晕状态。下面来看下,在 LOL 中,初始的英雄状态:public class Hero { //正常状态 public static final int COMMON = 1; //加速状态 public s.原创 2020-12-15 09:35:04 · 290 阅读 · 0 评论 -
「补课」进行时:设计模式(18)——访问者模式
1. 前文汇总「补课」进行时:设计模式系列2. 引言访问者模式也可以说是所有设计模式中最难的一种设计模式了,当然我们平常也很少会用到它。设计模式的作者是这么评价访问者模式的:大多情况下,你并不需要使用访问者模式,但是一旦需要使用它时,那就真的需要使用了。3. 一个简单的示例又快到年底, CEO 和 CTO 开始评定员工一年的工作绩效,员工分为工程师和经理, CTO 关注工程师的代码量、经理的新产品数量; CEO 关注的是工程师的KPI和经理的KPI以及新产品数量。由于 CEO 和 CTO 对于.原创 2020-12-14 08:55:10 · 417 阅读 · 0 评论 -
「补课」进行时:设计模式(17)——备忘录模式
1. 前文汇总「补课」进行时:设计模式系列2. 从版本控制开始相信每个程序猿,每天工作都会使用版本控制工具,不管是微软提供的 vss 还是 tfs ,又或者是开源的 svn 或者 git ,每天下班前,总归会使用版本控制工具提交一版代码。版本管理工具是让我们在代码出问题的时候,可以方便的获取到之前的版本进行版本回退,尤其是在项目发布投运的时候,当出现问题的时候直接获取上一个版本进行回滚操作。在这个操作中间,最重要的就是保存之前的状态,那么如何保存之前的状态?操作很简单,我们可以定义一个中间变量.原创 2020-12-07 11:14:22 · 396 阅读 · 0 评论 -
「补课」进行时:设计模式(16)——简单又实用的门面模式
1. 前文汇总「补课」进行时:设计模式系列2. 从银行转账说起当我们在银行进行转账操作的时候,整个操作流程我们可以简化为账户 A 扣费,然后账户 B 增加余额,最后转账操作成功。这两个操作缺一不可,同时又不能颠倒顺序。简单定义一个转账的接口 ITransfer :public interface ITransfer { // 首先发起转账 void start(String amount); // 账户 A 进行扣费 void subtractionA(); .原创 2020-12-03 09:31:22 · 472 阅读 · 0 评论 -
「补课」进行时:设计模式(15)——观察者模式
1. 前文汇总「补课」进行时:设计模式系列2. 观察者模式2.1 定义观察者模式(Observer Pattern)也叫做发布订阅模式(Publish/subscribe),它是一个在项目中经常使用的模式,其定义如下:Define a one-to-many dependency between objects so that when oneobject changes state,all its dependents are notified and updatedautomatically.原创 2020-11-30 08:50:58 · 4403 阅读 · 0 评论 -
「补课」进行时:设计模式(14)——组合模式
1. 前文汇总「补课」进行时:设计模式系列2. 某东的菜单前段时间双十一,不知道各位的战果如何,反正我是屯了两盒口罩凑个数。电商平台为我们提供的方便快捷的搜索框入口,我想大多数人在使用的时候应该都会使用这个入口,但其实电商平台还为我们提供了另一个入口,就是它的分类体系,如下:我简单抽象一下:- 服装 - 男装 - 衬衣 - 夹克 - 女装 - 裙子 - 套装可以看到,这是一个树结构,在前端实现一个这种菜单树可.原创 2020-11-23 09:09:38 · 509 阅读 · 0 评论 -
「补课」进行时:设计模式(13)——迭代器模式
1. 前文汇总「补课」进行时:设计模式系列2. 迭代器模式一说到迭代器,我首先想到的就是 Java 中的 java.util.Iterator 接口,打开看了一下 JDK1.8 的 API 文件,可以看到是从 1.2 的版本中开始添加 java.util.Iterator 这个接口,并逐步把 Iterator 应用到各个聚集类(Collection)中,同时可以看到另一个接口 java.lang.Iterable ,可以看到 java.lang.Iterable 有很多的子类以及实现类:基本上我.原创 2020-11-19 08:49:25 · 411 阅读 · 0 评论 -
「补课」进行时:设计模式(12)——适配器模式
1. 前文汇总「补课」进行时:设计模式系列2. 适配器模式2.1 定义适配器模式(Adapter Pattern)的定义如下:Convert the interface of a class into another interface clients expect.Adapterlets classes work together that couldn’t otherwise because of incompatibleinterfaces.(将一个类的接口变换成客户端所期待的另一种接口,.原创 2020-11-18 08:35:46 · 1017 阅读 · 0 评论 -
「补课」进行时:设计模式(11)——游戏中的策略模式
1. 前文汇总「补课」进行时:设计模式系列2. 游戏中的策略模式我是一个很喜欢玩游戏的人,周末在家打打游戏是真的很开心。回想起来当年上大学的往昔峥嵘岁月,那时候基本上是一个人在玩游戏,背后围着好几个人看,一个个的充当着狗头军师的作用。时间长了就能发现,喜欢看别人打游戏的人,往往自己玩的都不怎么样,但是当起狗头军师来那是一套一套的,难道这就是旁观者清?当年在大学宿舍玩的最多还是「英雄联盟」,当年还是 AP 剑圣横行天下,然而每次排位遇到的都是别人家的剑圣和我方剑圣。这时候,一般就是狗头军师上.原创 2020-11-17 09:47:13 · 378 阅读 · 0 评论 -
「补课」进行时:设计模式(10)——小明起床记了解装饰模式
1. 前文汇总「补课」进行时:设计模式系列2. 小明起床记小明每天早晨都是起床困难大户,大冬天的太冷了,温暖的被窝紧紧的拉住小明,阻止小明每天早晨的起床。闹钟响了一遍又一遍,如果再不起床就要迟到了,迟到了就要扣钱,扣了钱就要喝西北风了。每天早晨督促小明起床的根本不是闹钟,而是贫穷。起床第一件事儿是穿衣服,先传衣服,再传裤子,然后穿鞋子,最后穿上一件外套,出门上班。首先,定义一个抽象的小明,小明是个人,所以定义一个人:public abstract class Person { ab.原创 2020-11-16 08:42:48 · 285 阅读 · 0 评论 -
「补课」进行时:设计模式(9)——在请假中使用的责任链模式
1. 前文汇总「补课」进行时:设计模式系列2. 请假作为一位新时代的社畜,我们每天起得比鸡早,睡得比狗晚,还时不时的要受到上司的 PUA ,每天都生活在水深火热之中。生活中总会有各种意外,比如生病了,需要去医院看病,那我们需要请假去医院,一般在公司中,请假的时长和审批领导息息相关,如果这个规则是这样的:请假 3 天内小组长可以审批请假 5 天内需要大组长神品请假 20 天内需要部门经理审批如果按照顺序思维来写程序的话,那么我们需要做大量的 if…else 的判断,并且所有的类都要耦合在.原创 2020-11-11 09:00:56 · 388 阅读 · 0 评论 -
「补课」进行时:设计模式(8)——命令模式
1. 前文汇总「补课」进行时:设计模式系列2. 命令模式命令模式是一个高内聚的模式,其定义为:Encapsulate a request as anobject,thereby letting you parameterize clients with differentrequests,queue or log requests,and support undoable operations.(将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命.原创 2020-11-10 09:39:09 · 321 阅读 · 0 评论 -
「补课」进行时:设计模式(7)——租房子中的中介者模式
1. 前文汇总「补课」进行时:设计模式系列2. 租房子国内某知名大学著名毕业生隔壁老王同学在近日毕业了,好不容易在大魔都找到一份工作,接下来就需要做另一件大事儿了,租房子。租过房子的同学应该都知道,最方便最快捷的方式就是找房租中介,如果不找中介的话,就需要自己去联系一个一个的房东,去约看每一间的房子。如果恰巧这些房东之间有联系,都在出租房屋,当客户 A 看了一号房东的房子,感觉不满意,一号房东推荐它可以去看看其他几个房东的房子,这时候,这个房东就需要联系他的其他几个房东朋友。如果这些房东中间恰.原创 2020-11-04 08:50:09 · 437 阅读 · 0 评论 -
「补课」进行时:设计模式(6)——郭靖大侠带你学原型模式
1. 前文汇总「补课」进行时:设计模式系列2. 找工作这一天,郭靖大侠因为在桃花岛调戏侍女被黄蓉打出了桃花岛,这下可玩大了,从桃花岛被赶出来吃啥喝啥啊,得赶紧找份工作,西北风可喝不饱肚子哇~~~这不,我们的郭大侠就开始写简历,准备向丐帮、全真教、白驼山和段氏家族投一份简历,看看能不能先混碗饭吃,等老婆的气消了再回去。首先,先定义一个简历类:public class Resume { private String name; private String position; .原创 2020-11-02 08:48:04 · 1174 阅读 · 0 评论 -
「补课」进行时:设计模式(5)——从 LOL 中学习代理模式
1. 前文汇总「补课」进行时:设计模式系列2. 从 LOL 中学习代理模式我是一个很喜欢玩游戏的人,虽然平时玩游戏的时间并不多,但我也是一个忠实的 LOL 的爱好者,就是段位有点惨不忍睹,常年倔强的黑铁,今年 S10 的总决赛在上海举行,这个事儿我从 S9 就开始期待,结果门票今年没卖,直接是抽签拼人品。360w+ 人抽 3600+ 人,这个概率属实有点低,只能找个地方和我的小伙伴一起看了。打 LOL 最开心的事情莫过于拿到 PentaKill 和 victory ,把这件事情使用代码表现出来.原创 2020-10-31 10:03:41 · 471 阅读 · 0 评论 -
「补课」进行时:设计模式(4)——建造者模式
1. 前文汇总「补课」进行时:设计模式系列2. 建造者模式定义建造者模式(Builder Pattern)也叫做生成器模式,其定义如下:Separate the construction of a complex object from its representation sothat the same construction process can create different representations.(将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。).原创 2020-10-27 10:30:09 · 420 阅读 · 0 评论 -
「补课」进行时:设计模式(3)——和做菜一样简单的模版方法模式
1. 前文汇总「补课」进行时:设计模式系列2. 做菜?做菜大致需要几个步骤?洗菜切菜起锅烧油装盘剩下的就可以吃了,对吧~~~现在,我们要做一个番茄炒蛋,就下面这货:第一步:先把番茄洗干净去皮。第二步:番茄切好,鸡蛋打散。第三步:起锅烧油,一顿翻炒。第四步:装盘,大功告成。这件事情我用程序实现下,先抽象一个做菜的模型:public abstract class AbstractCook { /** * 做菜第一步就是先洗菜 */ .原创 2020-10-26 09:33:37 · 1268 阅读 · 0 评论 -
「补课」进行时:设计模式(2)——通过一个超级汽车工厂来了解工厂模式
1. 超级汽车工厂汽车相信大家都不陌生,我们现在最常用的交通工具得益于在奔驰在 1885 年研制的第一辆「三轮车」,就是下面这个家伙:今天我来试一下使用程序通过汽车工厂来造汽车。1.1 定义一辆汽车public interface Car { void name(); void drive();}身为一辆汽车,首先要有自己的名字,其次是要能开,有了这两个东西,基本上就能叫一辆汽车了。1.2 定义一辆特斯拉、一辆奔驰、一辆奥迪public class Tesla impl.原创 2020-10-22 08:46:42 · 3081 阅读 · 0 评论 -
「补课」进行时:设计模式(1)——人人都能应该懂的单例模式
1. 引言最近在看秦小波老师的《设计模式之禅》这本书,里面有句话对我触动挺大的。设计模式已经诞近 20 年了,其间出版了很多关于它的经典著作,相信大家都能如数家珍。尽管有这么多书,工作 5 年了还不知道什么是策略模式、状态模式、责任链模式的程序员大有人在。很不幸,我就是这部分人当中的一个。回想起这几年的工作生涯,设计模式不能说没有接触过,但是绝对不多,能想到的随手写出来的几个设计模式也仅限于「单例模式」、「工厂模式」、「建造者模式」、「代理模式」、「装饰模式」。好吧,我认知比较深的也就这几个模.原创 2020-10-20 12:18:11 · 634 阅读 · 0 评论