小黄学设计模式
文章平均质量分 74
贼爱学习的小黄
这个作者很懒,什么都没留下…
展开
-
设计模式之访问者模式
表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。在访问者模式中国,数据结构与处理被分离开来。我们白那些一个表示“访问者”的类来访问数据结构中的元素,并把对个元素的处理交给访问者类。当需要增加新的处理时,我们只需要编写新的访问者,然后让数据结构可以接收访问者的访问即可。在示例程序中我们模拟校园中有老师、学生两个被访问的对象,而校长、家长就是两个访问者。对于校长来说他只关心老师所在班级的升学率,对于家长来说他只关心学生的排名。关于这个案例的核心逻辑实现,有原创 2022-06-30 10:51:45 · 210 阅读 · 0 评论 -
设计模式之模版模式
模板模式的业务场景在平时开发中并不常见,这个设计模式的核心在于定义逻辑行为的执行顺序,他可以控制整套逻辑的执行顺序和统一的输入输出,而对于实现方只需要关心自己的业务逻辑即可。但在日常生活中我们经常接触到模板,比如写周报的时候,会有一个周报模板,我们只需要按照模板填写工作内容即可。例如以下是小黄的周报模板,可以把他看作四大块,标题、本周工作、下周工作、总结。每个人填写的内容是不一样的,但是模板制约了填写的内容。在示例程序中我们实现从不同的网站上爬虫的场景,在此场景中,我们按照顺序实现三个模块:模拟登录,爬取信原创 2022-06-29 22:02:07 · 286 阅读 · 0 评论 -
设计模式之策略模式
策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。在商品详情页面,商家为了激起群众的购买欲望,经常会发送一些优惠券,比如:满减、直减、折扣、n元购等优惠券,在本案例中,我们模拟在购买商品时使用的各种类型的优惠券。不使用设计模式,使用if-else对不同的优惠券进行判断,代码如下 使用策略模式 上述的代码不利于后续的维护,我们通过策略模式进行修改。优惠接口 各类优惠实原创 2022-06-28 11:58:10 · 119 阅读 · 0 评论 -
设计模式之状态模式
在状态模式中,我们用类来表示状态,State的意思就是状态。允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。如下图所示,这是一个提交审批的流程,例如钉钉的请假流程,编辑后走向提交,提交后可以撤回、通过、拒绝,只有当通过后才可以完成请假流程。流程信息 流程状态枚举 流程服务类 不使用状态模式 result返回类 控制层只能使用if-else进行多原创 2022-06-27 20:14:03 · 230 阅读 · 0 评论 -
设计模式之观察者模式
观察者模式(有时又被称为模型(Model)-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。在观察者模式中,当观察对象的状态发生变化时,会通知给观察者,观察者模式适用于根据对象状态进行相应处理的场景。在示例程序中,观察者将贯穿一个会生成数值的对象,并且将它生成的数值结果显示出来。不过每个观察者显原创 2022-06-23 16:09:32 · 205 阅读 · 0 评论 -
设计模式之备忘录模式
备忘录模式是一种软件设计模式:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。这种设计模式无论在生活中还是开发中都是非常常见的,比如不存在的后悔药等,而在开发中比如ctrl+z回退、Photoshop的历史记录等而对于我们开发者比较常见的一个功能在于发布程序版本的,有时候紧急部署一个新的版本却发现不能用,我们可以迅速的回滚到上个版本。在示例程序中我们模拟在发布上线的过程中记录线上配置文件用于紧急回滚ConfigFile ConfigMeme原创 2022-06-22 15:33:46 · 168 阅读 · 0 评论 -
设计模式之中介者模式
用一个中介对象来封装一系列对象的交互,从而把一批原来可能是交互关系复杂的对象转换成一组松散耦合的中间对象,以有利于维护和修改。相信大家都用过微信吧,在微信中想要跟朋友聊天需要添加对方为好友,为微信群提供了一个更强大的功能,你分享一条消息,群里所有的人都可以看到这条消息,而微信群就充当了中介者的作用,让所有人不需要互相成为好友,即可发送消息。中介者可以将原来复杂的网图,通过自己转换成简单的网图抽象同事 抽象中介 具体中介将所有的元素存储在list集合中,方便统一管理 具体同事 测试 总结 中介者模式在开发中并原创 2022-06-22 10:54:34 · 106 阅读 · 0 评论 -
设计模式之迭代器模式
迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。对于Java来说迭代器并不陌生,比如map的遍历就是使用迭代器来实现的。我们模拟将书放在书架上,并且按照顺序显示出来Aggregate想要遍历集合中的元素时,可以调用iterator方法来生成Iterator实例 IteratorhasNext方法判断集合中是否还有下一个元素,next方法是获取集合中的下一个元素 Book粗略的写一下Book实体类,在这段程序中并不重要 BookShelfBookShe原创 2022-06-21 17:54:51 · 165 阅读 · 0 评论 -
设计模式之命令模式
在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,实现二者之间的松耦合。这就是命令模式(Command Pattern)。在开发过程中,命令模式并不是很常见,而在现实生活中,处处充满了命令模式。比如顾客到餐厅点餐,顾客将点好的菜交给店员,这时候店员再下命令给厨师,这期间店员就充当了”行为请求者”,厨师充当了“行为实原创 2022-06-21 15:48:09 · 137 阅读 · 0 评论 -
设计模式之责任链模式
首先我们了解一下什么是“推卸责任”,假设去某购物网站咨询售后问题,首先售前客服会让你联系售后客服,连续售后客服后会让你联系产品质量客服等等,就像被踢皮球一样踢来踢去。推卸责任有点贬义词的意思,但这有利于我们更快的理解责任链模式。在责任链模式中,每一个处理人只负责它可以处理的问题,如果这个问题处理不了,则推给下一个人,下一个人再处理不了再推给下下个人…这就是责任链模式。在此章节中,我们举一个更贴近生活的例子,公司采购某产品,需要经过3级领导审批,如果价格大于1000块,还需要经过2级领导审批,如果价格大于10原创 2022-06-20 17:43:21 · 143 阅读 · 0 评论 -
设计模式之代理模式
在日常生活中我们经常听到代理这个词语,它指的是代替别人进行工作。当有一些功能不需要“本人”亲自工作时,可以让代理人进行工作,但是有一些特殊的功能需要“本人”亲自工作时,那这些功能会交给“本人”实现。在示例程序中,我们模仿大老板签字,只有特定的文件需要大老板签字时,小老板才会将文件交给他,其余的文件小老板可以全权负责,可以理解为小老板是大老板的代理。Bossable Boss BossProxy test 参与角色 Subject(主体)Subject定义了使Boss和BossProxy角色之间具有一致性原创 2022-06-20 15:24:52 · 117 阅读 · 0 评论 -
设计模式之享元模式
享元模式(英语:Flyweight Pattern)是一种软件设计模式。它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于只是因重复而导致使用无法令人接受的大量内存的大量物件。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。关于享元模式,一言以蔽之就是“通过尽量共享实例来避免new出新的实例”。大家肯定都有使用过淘宝、京东等一些购物软件,在商品详情中,几乎所有的数据都是不会发生变化的。用户在短期内访问该商品,变化的一般只有库原创 2022-06-19 17:00:09 · 162 阅读 · 0 评论 -
设计模式之外观模式
外观模式可以为互相关联在一起的错综复杂的类整理出高层接口,其中Facade角色可以让系统对外只有一个简单的API。而且Facade角色还会考虑到系统内部各个类之间的责任关系和依赖关系,按照正确的顺序调用各个类。外观模式中的Facade角色其实可以看成一个中间件,举一个比较熟悉的例子,在没有学习MyBatisPlus、MyBatis之前,我们对数据库的访问是使用JDBC的方式,而MyBatisPlus、MyBatis将内部调用的方法或类,整理出一个简单的API供我们使用。在示例程序中,我们编写简单的web页面原创 2022-06-19 16:05:04 · 209 阅读 · 0 评论 -
设计模式之装饰者模式
在程序开发设计中,开闭原则是一个非常重要的原则,他要求类应该对扩展开放,对修改关闭,而装饰者模式就是这一原则的最佳实现。装饰者模式顾名思义,就是很多不同的“装饰品”来修饰某一个主体,比如同样都是蛋糕,被奶油装饰的蛋糕叫做“奶油蛋糕”,在加一块饼干叫做“奶油饼干蛋糕”,再加一块巧克力叫做“巧克力奶油饼干蛋糕”。装饰者模式动态的将责任附加到了对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案来通过一段示例程序了解一下装饰者模式我们要完成一下功能,定义一个字符串,如果用SideBorder装饰,会出现以下原创 2022-06-17 17:58:17 · 358 阅读 · 0 评论 -
设计模式之桥接模式
桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(interface)模式。现如今电子支付非常流行,熟悉的有微信支付,支付宝支付等,那么就有程序应运而生,综合多种支付接口,不论微信支付还是支付宝还是其他支付,通过他的接口可以分发到不同的策略中。除了支付通道之外,还有多种支付方式,比如刷脸支付、扫码支付、密码支付。支付通道和支付方式是完全互不关联的,我们通过桥接模式将两者关联起来。普通模式是看起来最易懂的模式,用if原创 2022-06-15 19:46:57 · 120 阅读 · 0 评论 -
设计模式之适配器模式
在日常生活中,我们经常会用到适配器,比如我们家里的插座电压都是220V,而笔记本的额定工作电压是15V,我们怎么让笔记本在正常的插座上工作呢?其实充电器就是一个适配器,他将220V的电压转换成了15V的电压,供电脑工作。而在开发过程中,我们也经常会遇到这种问题,在学习适配器模式之前,小黄确实做法很low,小黄的工作经常对接不同平台的设备,比如一个车牌号,A厂商通过MQ发过来的字段名是vehicleNumber,B厂商字段名是vehicleNum,C厂商可能又是另外的名字。每每在解析数据的时候,都会让小黄异常原创 2022-06-15 11:17:39 · 112 阅读 · 0 评论 -
设计模式之单例模式
在程序运行的时候,通常会产生很多实例,例如String类和字符串是一对一的关系,当创建了1000个字符串时,就会有1000个实例生成。但是在实际开发过程中,我们需要在程序中,某个东西只会存在一个,就会有只能创建一个实例的需求。例如在程序中开辟缓存时,缓存对象我们只希望他创建一次。这种方法在程序内部做缓存时非常的常见,ConcurrentHashMap 的优势在于兼顾性能和线程安全,一个线程在进行写操作时,它会锁住一小部分,其他部分的读写不受影响,其他线程访问没上锁的地方不会被阻塞 饿汉模式 饿汉模式指的是在原创 2022-06-14 15:25:36 · 89 阅读 · 0 评论 -
设计模式之原型模式
在Java中,我们通常使用类名来创建一个对象,但是在开发过程中,有时候也会有”在不指定类名的前提下生成实例“的需求。原型模式可以满足这种需求,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 ...原创 2022-06-14 09:23:15 · 89 阅读 · 0 评论 -
设计模式之工厂方法模式
工厂方法模式,父类决定实例的生成方式,但不决定所要生成的具体的类,具体的处理全部交给子类负责,这样就可以将生成实例的框架(framework)和实际负责生成实例的类解耦。示例程序的作用是制作身份证,他其中有4个类 Factory类 Factory类中,声明了用于生成产品的createProduct抽象方法和注册产品的registerProduct抽象方法。生成产品和注册产品的具体处理交给子类来实现。在这个框架中,我们定义了工厂是用来调用create方法来生成Product实例的,而create方法的实现是先原创 2022-06-07 20:50:36 · 221 阅读 · 0 评论 -
设计模式之六大原则
本文介绍了设计模式遵循的六大原则,分别是单一职责原则、开闭原则、里氏替换原则、迪米特法则、接口隔离原则、依赖倒置原则原创 2022-06-07 09:23:07 · 163 阅读 · 0 评论