![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 86
以手写源代码的方式实现23种常用的设计模式,以及对设计模式的6大原则进行分析
不要迷恋发哥
永远不要“用战术上的勤奋,掩饰战略上的懒惰”~~~~~~一名爱好古筝的IT宅男
展开
-
【手写源码-设计模式】-总论-基于GOF23种设计模式模拟不同场景解析
一、设计模式概念设计模式(Design pattern) 是解决软件开发某些特定问题而提出的一些解决方案也可以理解成解决问题的一些思路。通过设计模式可以帮助我们增强代码的可重用性、可扩充性、 可维护性、灵活性好。我们使用设计模式最终的目的是实现代码的高内聚和低耦合。二、设计模式的三大分类及关键点1、创建型模式对象实例化的模式,创建型模式用于解耦对象的实例化过程。单例模式:某个类智能有一个实例,提供一个全局的访问点。工厂模式:一个工厂类根据传入的参量决定创建出哪一种产品类的实例。抽原创 2021-08-29 21:39:10 · 254 阅读 · 0 评论 -
【手写源码-设计模式23】-访问者模式-男人和女人
1:主题拆解①基本介绍②男人和女人③访问者模式的优缺点④适用场景2:基本介绍访问者模式:提供一个作用于某对象结构中的各元素的操作表示,它使得可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式是一种较为复杂的行为型设计模式,它包含访问者与被访问者两个主要组成部分,这些被访问的元素通常具有不同的类型,且不同的访问者可以对它们进行不同的访问操作。访问者模式使得用户可以在不修改现有系统的情况下扩展系统的功能,为这些不同类型的元素增...原创 2021-09-24 00:05:03 · 174 阅读 · 0 评论 -
【手写源码-设计模式22】-策略模式-基于互联网电商购物车支付
1:主题拆解①基本介绍②互联网电商购物车支付③策略模式的优缺点④适用场景2:基本介绍策略模式:定义一系列算法类,将每一个算法封装起来,并让他们可以相互替换。每一个封装的算法可以被称之为一种策略,为了保证这些策略在使用时具有一致性,一般会提供一个抽象的策略类作为规则的定义,每种具体算法对应于一个具体策略类。策略模式的主要目的是将算法的定义与使用分开,也就是将算法的行为和环境分开,将算法的定义放在专门的策略类中,每一个策略类封装...原创 2021-09-23 14:24:17 · 243 阅读 · 0 评论 -
【手写源码-设计模式21】-状态模式-加班内卷身体被掏空
1:主题拆解①基本介绍②加班内卷身体被掏空③状态模式的优缺点④适用场景⑤寄语2:基本介绍状态模式:允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎是修改了它的类。状态模式用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。当系统中的某个对象存在多个状态,这些状态之间可以进行转换,而且对象在不同状态下行为不相同时可以使用状态模式。状态模式将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对...原创 2021-09-23 01:04:17 · 662 阅读 · 0 评论 -
【手写源码-设计模式20】-观察者模式-基于初中文言文口技
1:主题拆解①基本介绍②初中文言文口技③忽一人大呼"火起"④观察者模式的优缺点⑤适用场景2:基本介绍观察者模式:定义对象之间的一种一对多依赖关系,使得每一个对象状态发生改变时,其相关依赖对象皆得到通知并自动更新。观察者模式使用频率很高,用于建立一种对象之间的依赖关系,当一个对象发生改变时自动通知其他对象,其他对象将做出相应反应。在观察者模式中,发生改变的对象叫做观察目标,也叫被观察者,而被通知的对象叫做观察者。一个观察...原创 2021-09-21 09:40:20 · 155 阅读 · 0 评论 -
【手写源码-设计模式19】-备忘录模式-如果王者荣耀中有月光宝盒
1:主题拆解①基本介绍②如果王者荣耀中有月光宝盒③备忘录模式的优缺点④适用场景⑤应用实例⑥总结2:基本介绍备忘录模式:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。备忘录模式保存的是我们关心的在恢复时需要的对象的部分状态信息,相当于快照。比如在玩游戏的时候有一个保存当前闯关的状态的功能,会对当前用户所处的状态进行保存,当用户闯关失败或者需要从快照的地方开始的时候,就...原创 2021-09-20 00:34:13 · 1009 阅读 · 0 评论 -
【手写源码-设计模式18】-中介者模式-基于世界卫生组织协调战胜新冠场景
1:主题拆解①基本介绍②战胜新冠人人有责③中介者模式的优缺点④适用场景⑤应用实例2:基本介绍中介者模式:用一个中介者对象来封装一系列的对象交互,中介者使各对象不需要显示地相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互。中介者模式又叫调停者模式,是一种对象行为型模式。中介者模式有一下四种角色①Mediator(抽象中介者)定义了与各同事类之间进行通信的方法②ConcreteMediator(具体中介者)抽象中介者的子类,协调各个同事对象实.原创 2021-09-19 14:34:24 · 104 阅读 · 0 评论 -
【手写源码-设计模式17】-迭代器模式-基于客户与商品数据遍历
1:主题拆解①基本介绍②客户与商品数据遍历③迭代器模式的优缺点④适用场景⑤应有实例2:基本介绍提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。迭代器模式的结构如下①抽象容器一般是一个接口,提供一个iterator()方法。②具体容器就是抽象容器的具体实现类,比如List接口的有序列表实现ArrayList,List接口的链表实现LinkList,Set接口的哈希列表的实现HashSet等。③抽象迭代器定义遍历元素所需要的方法,一般来原创 2021-09-19 11:34:35 · 246 阅读 · 0 评论 -
【手写源码-设计模式16】-命令模式-基于麦丹劳点餐场景
1:主题拆解①基本介绍②麦丹劳点餐场景③命令模式的优缺点④适用场景2:基本介绍在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作时哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计。命令模式使请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活,实现解耦。在命令模式中,会将一个请求封装为一个对象,以便使用不同参数来表示不同的请求,同时命令模式也支持撤销操作。3:麦丹劳点.原创 2021-09-18 18:27:16 · 307 阅读 · 0 评论 -
【手写源码-设计模式15】-责任链模式-基于人事请假单工作流场景
1:主题拆解①基本介绍②人事请假单工作流模拟③责任链模式的优缺点④适用场景⑤应用实例⑥ASP.NET 管道模型2:基本介绍责任链模式很像异常的捕获和处理,当一个问题发生的时候,当前对象看一下自己是否能够处理,不能的话将问题抛给自己的上级去处理,但是要注意这里的上级不一定指的是继承关系的父类,这点和异常的处理是不一样的。所以可以这样说,当问题不能解决的时候,将问题交给另一个对象去处理,就这样一直传递下去直至当前对象找不到下线了,处理结束...原创 2021-09-18 16:17:16 · 785 阅读 · 0 评论 -
【手写源码-设计模式14】-模板方法模式-基于银行系统存款
1:主题拆解①基本介绍②知识同步③银行系统存款模拟④解释器模式的优缺点④适用场景⑤MVC框架使用⑥知识扩展2:基本介绍模板方法模式:简单、强大、无所不在,框架搭建必备。模板方法:定义通用处理流程;实现了通用部分;可变部分留作扩展点。框架搭建:定义业务处理流程;实现了通用部分;可变部分留作扩展点。模板方法模式,在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。简单说,就是定义一个操作的算法骨架,而原创 2021-09-17 15:07:51 · 203 阅读 · 0 评论 -
【手写源码-设计模式13】-解释器模式-基于无人机玩漂移场景
1:主题拆解①基本介绍②无人机玩漂移③解释器模式的优缺点④手写源码模拟适用场景⑤代理模式与装饰模式的不同2:基本介绍解释器模式是一种使用频率较低但是学习难度较大的设计模式,用于描述如何使用面向对象语言构成一个简单的语言解释器。某些情况下可能需要自定义一个新语言,这种语言具有自己的文法规则,这时可以使用解释器模式进行设计。3:无人机玩漂移无人机作为成人年比较流行的大玩具,如果能够玩出一些新花样,例如玩玩漂移是不是很爽。但是我们在遥控器上进行操作的时候,无人机该执行什么动原创 2021-09-17 11:35:32 · 163 阅读 · 0 评论 -
【手写源码-设计模式12】-代理模式-基于飞猪购买火车票
1:主题拆解①基本介绍②飞猪购买火车票③代理模式的优缺点④手写源码模拟适用场景⑤代理模式与装饰模式的不同2:基本介绍代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是中介。代理模式是一种应用很广泛的结构型设计模式,而且变化很多。在代理模式中引入了一个新的代理对象,代理对象可以在客户端对象和目标对象之间起到中介的作用,去掉客户不能看到的内容或者增添客户需要的额外服务。AOP面向切面编程,代理模式是一个极简的设计模式,也是A.原创 2021-09-16 18:13:52 · 275 阅读 · 0 评论 -
【手写源码-设计模式11】-享元模式-基于打麻将场景
1:主题拆解①基本介绍②孔雀东南飞的来源③打麻将场景模拟④享元模式的优缺点⑤适用场景⑥应用实例⑦享元模式和单例模式的区别⑧享元模式扩展2:基本介绍说到享元模式,第一个想到的应该就是池技术了,String常量池、数据库连接池、缓冲池等等都是享元模式的应用,所以说享元模式是池技术的重要实现方式。比如我们每次创建字符串对象时,都需要创建一个新的字符串对象的话,内存开销会很大,所以如果第一次创建了字符串对象“设计模式”,下次再创建相同...原创 2021-09-16 15:17:29 · 813 阅读 · 0 评论 -
【手写源码-设计模式10】-外观模式-基于多个微服务调用实现下单
1:主题拆解①基本介绍②多个微服务调用实现下单③门面模式的优缺点④适用场景⑤应用实例2:基本介绍外观模式:外部与一个子系统的通信通过一个统一的外观角色进行,为子系统中的一组接口提供一个一致的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又叫门面模式,是一种对象结构型模式。3:多个微服务调用实现下单我司系统基于各个功能模块采用微服务的方式,整体实现了一套下单交易系统。现在模拟下单的各个环节。1:基本版①物流微服务 .原创 2021-09-15 15:29:08 · 1049 阅读 · 0 评论 -
【手写源码-设计模式9】-装饰器模式-基于王者荣耀英雄-甄姬皮肤场景
1:主题拆解①基本介绍②王者荣耀英雄甄姬皮肤场景③装饰器模式的优缺点④适用场景⑤相关扩展2:基本介绍装饰模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。装饰模式是一种用于替代继承的技术,无须定义子类即可给对象动态增加职责,使用对象之间的关联关系来代替继承关系,在装饰模式中引入了装饰类,在装饰类中既可以调用待装饰的原有类方法,还可以增加新的方法,以扩充原有的类功能。3:...原创 2021-09-15 12:39:59 · 233 阅读 · 0 评论 -
【手写源码-设计模式8】-组合模式-基于项目提成分配场景模拟
1:主题拆解①基本介绍②项目提成分配场景模拟③安全组合模式升级④组合模式的优缺点⑤适用场景⑥不想做CEO的实习生不是好开发2:基本介绍组合模式,将对象组合成树形结构以表示“整体-部分”的层次结构,一种对象结构型模式。由于在软件开发中存在大量的树形结构,因此组合模式是一种使用频率较高的结构型设计模式,在XML解析、组织结构树处理、文件系统设计等领域,组合模式都得到了广泛应用。组合模式的分类:①透明组合模式透明组合模式中,抽象构件角色中声明了所有对于管理成员.原创 2021-09-13 15:08:12 · 142 阅读 · 0 评论 -
【手写源码-设计模式7】-桥接模式-基于苹果小米手机刷机场景
1:主题拆解①基本介绍②苹果小米刷机场景模拟③桥接模式的优缺点④适用场景⑤应用实例⑥总结2:基本介绍将实现与抽象放在两个不同的层次中,使两个层次可以独立改变。桥接模式基于类的最小设计原则,通过使用封装、聚合、继承等行为让不同的类承担不同的职责。它的主要特点是把抽象与行为实现分离开,从而可以保持各部分的独立性以及功能扩展。3:苹果小米刷机场景模拟1:基础版①定义手机抽象父类public abstract class BasePhone{ .原创 2021-09-13 11:24:16 · 247 阅读 · 0 评论 -
【手写源码-设计模式6】-适配器模式-基于IPhoneX手机充电场景
1:主题拆解①基本介绍②IPhone手机充电场景模拟③类适配器与对象适配器的区别④适配器模式的优缺点⑤适用场景⑥C#.NET中的使用场景2:基本介绍Adapter适配器模式,将一个类的接口转换成客户希望的另外一个接口。使原本由于接口不兼容而不能一起工作的那些类可以一起工作了。适配器模式有“类适配器”和“对象适配器”两种不同的形式。3:IPhone手机充电场景模拟以下以苹果手机充电方式来模拟适配器模式的应用1:基础版国行IPhone8与IPhoneX充.原创 2021-09-11 17:55:30 · 218 阅读 · 0 评论 -
【手写源码-设计模式5】-原型模式-基于学习Java,C#,C++场景
1:主题拆解①基本介绍②模式演变过程③C#内存分配机制④如何深拷贝⑤原型模式优缺点⑥适用场景2:基本介绍原型模式:使用原型实例指定创建对象的种类,并且通过克隆这些原型创建新的对象。原型模式是一种对象创建型模式。原型模式的工作原理很简单,将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象克隆自己来实现创建过程。原型模式是一种另类的创建型模式,创建克隆对象的工厂就是原型类自身,工厂方法由克隆方法实现。通过克隆方法创建的对象是全新的对象,.原创 2021-09-11 12:36:44 · 195 阅读 · 0 评论 -
【设计模式-手写源码-4】-建造者模式-基于生产法拉利955
1:主题拆解①基本介绍②生产法拉利场景分析③基于四大角色拆解④建造者模式优缺点⑤使用场景2:基本介绍建造者模式就是将一个个简单的对象一步一步构建成一个复杂的对象。建造者模式将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。我们生活中有很多可以用建造者模式来解释。譬如在生产汽车的流水线作业中,我们需要先将生产汽车所需的一个一个的内部构建建造出来,例如发动机,车门,车轮,方向盘,水箱等。对于我们用户来说,我们并不需要知道这个汽车是怎么建造...原创 2021-09-03 11:56:16 · 139 阅读 · 0 评论 -
【设计模式-手写源码-3】-抽象工厂模式-基于三国杀场景
1:主题拆解①基本介绍②三国杀场景分析③抽象工厂优缺点④使用场景分析⑤三大工厂对比总结2:基本介绍创建相关或依赖对象的家族,而无需明确指定具体类。①为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。②抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品③使用抽象工厂模式一般要满足以下条件:系统中有多个产品族, 每个具体工厂创建同族但属.原创 2021-09-02 14:47:00 · 217 阅读 · 0 评论 -
【设计模式-手写源码-2】-工厂方法模式-基于魔兽争霸冰封王座
1:主题拆解①对比简单工厂,建立工厂方法(FactoryMethod)②工厂方法的优缺点和应用③对修改关闭对扩展开放④面向切面编程2:基本介绍定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法模式使一个类的实例化延迟到其子类。3:场景介绍我们以魔兽争霸冰封王座的游戏背景来解析当前的设计模式。①定义了4个种族,依次为Human,NE,ORC,Undeadpublic class Human : IRace { public.原创 2021-09-01 02:37:58 · 328 阅读 · 0 评论 -
【设计模式-手写源码-附1】-简单工厂模式-基于魔兽争霸冰封王座
1:主题拆解①依赖倒置原则-SimpleFactory②简单工厂+ 配置文件=可配置③简单工厂+ 配置文件+反射=可配置可扩展④简单工厂升级IOC控制反转2:基本介绍①学习设计模式的套路:场景出发-->解决问题-->沉淀总结-->推广应用(无尽升级)②需要指出GOF23种设计模式是不包含简单工厂,因此上面写的是 附1③一句话描述:简单工厂设计模式包含一组需要创建的对象,通过一个工厂类来实例化对象④依赖倒置原则:上层模块不应该依赖于下层模块,二者.原创 2021-08-31 17:33:13 · 345 阅读 · 0 评论 -
【设计模式-手写源码1】-单例模式
1:主题拆解①单例模式(单线程和多线程)②单例模式的三种写法③单例模式的优缺点④单例模式应用场景2:基本介绍一句话描述:某个类只能有一个实例,提供一个全局的访问点。单例模式比较简单,可以说没有复杂的调用和接口的设计,就是一个简单的类,只是要求这个类只生成一个对象,无论什么时候都要保证这一点,因此只能生成一个实例的模式就是单例模式。3:如何手写一个单例模式单例模式:保证进程中,类型只有一个实例 ①构造函数私有化,防止他人实例化 ②对外提供一个获取实例的途径,公开...原创 2021-08-29 21:46:29 · 509 阅读 · 2 评论