设计模式
文章平均质量分 89
知识记录者-vincent
这个作者很懒,什么都没留下…
展开
-
各设计模式的总结和对比
一句话归纳设计原则设计原则 一句话归纳 目的 开闭原则(OCP)Open-Close 对扩展开发,对修改关闭 减少维护带来新的风险 依赖倒置原则(DIP)Dependence Inversion 高层不依赖低层 更利于代码结构的升级、扩展 单一职责原则(SRP)Simple Responsibility 一个类只干一件事 便于理解,提高代码可读性 接口隔离原则(ISP)Interface Segregation 一个接口只干一件事原创 2020-11-12 09:58:05 · 283 阅读 · 1 评论 -
设计模式之——访问者模式
访问者模式(Visitor Pattern)是一种将数据结构与数据操作分离的设计模式,是指封装一些作用于某些数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作,属于行为型模式访问者模式被称为最复杂的设计模式,并且使用频率不高,基本思想是,针对系统中拥有固定类型的对象结构(元素),在其内提供一个accept()方法用来接受访问者对象的访问,不同的访问者对同一元素的访问内容不同,使得相同的元素集合可以产生不同的数据结果。accept()方法可以接收不同的访问者对象,然后在内原创 2020-11-11 16:03:07 · 646 阅读 · 0 评论 -
设计模式之——解释器模式
解释器模式(Interpreter Pattern)是指给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子,是一种按照规定的语法(文法)进行解析的模式,属于行为型模式,就比如编译器可以将源码编译解释为机器码,让CPU能进行识别并运行,解释器模式的作用其实与编译器一样,都是将一些固定的文法(即语法)进行解释,构建出一个解释句子的解释器。简单理解,解释器是一个简单语法分析工具,它可以识别句子语义,分离终结符号和非终结符,提取出需要的信息,让我们能针对不同的信息做出相应的原创 2020-11-11 15:17:42 · 98 阅读 · 0 评论 -
设计模式之——中介者模式
中介者模式(Mediator Pattern)又称为调解者模式或调停者模式。用一个中介对象封装一系列的对象交互,中介者使各对象不需要显式地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互,属于行为型模式,当某些对象之间的作用发送改变时,不会立即影响其他的一些对象之间的作用,保证这些作用可以彼此独立的变化,其核心思想是,通过中介者解耦系统各层次对象的直接耦合,层次对象的对外依赖通信统统交由中介者转发应用场景系统中对象之间存在复杂的引用关系,产生的相互依赖关系结构混乱且难以理解 交互的公原创 2020-11-11 14:30:14 · 53 阅读 · 0 评论 -
设计模式之——备忘录模式
在不破坏封闭的前提下,捕获一个对象的内部状态,保存对象的某个状态,以便在适当的时候恢复对象,又叫做快照模式,属于行为模式,备忘录模式实现的方式需要保证被保存的对象状态不能被对象从外部访问应用场景玩游戏的时候肯定有存档功能,下一次登录游戏时可以从上次退出的地方继续游戏 棋盘类游戏的悔棋、数据库事务回滚 需要记录一个对象的内部状态时,为了允许用户取消不确定或者错误的操作,能够恢复到原先的状态 提供一个可回滚的操作,如ctrl+z、浏览器回退按钮角色Originator: 发起者,记录原创 2020-11-11 11:46:53 · 132 阅读 · 0 评论 -
设计模式之——状态模式
对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为 ,属于行为型模式,允许一个对象在其内部状态改变时改变它的行为状态模式是策略模式的孪生兄弟,它们的UML图是一样的,但实际上解决的是不同情况的两种场景问题,工作中用的不多,基本是策略模式比较多应用场景一个对象的行为取决于它的状态, 并且它必须在运行时刻根据状态改变它的行为 代码中包含大量与对象状态有关的条件语句 ,比如一个操作中含有庞大的多分支的条件if else语句,且这些分支依赖于该对象的状态 电商订单状态:未原创 2020-11-11 11:36:39 · 119 阅读 · 0 评论 -
设计模式之——命令模式
请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的对象,并把该命令传给相应的对象 执行命令,属于行为型模式,命令模式是一种特殊的策略模式,体现的是多个策略执行的问题,而不是选择的问题应用场景 只要是你认为是命令的地方,就可以采用命令模式 日常每个界面、按钮、键盘 事件操作都是 命令设计模式 角色抽象命令(Command):需要执行的所有命令都在这里声明具体命令(ConcreteCommand):定义一个接收者和行为之间的弱耦合,实现execut原创 2020-11-11 11:19:05 · 59 阅读 · 0 评论 -
设计模式之——迭代器模式
提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部实现,属于行为型模式,应该是java中应用最多的设计模式之一,提到迭代器,想到它是与集合相关的,集合也叫容器,可以将集合看成是一个可以包容对象的容器,例如List,Set,Map,甚至数组都可以叫做集合,迭代器的作用就是把容器中的对象一个一个地遍历出来应用场景一般来说,迭代器模式是与集合是共存的,只要实现一个集合,就需要同时提供这个集合的迭代器,就像java中的Collection,List、Set、Map等 都有自己的迭代器原创 2020-11-11 10:57:37 · 156 阅读 · 0 评论 -
设计模式之——责任链模式
客户端发出一个请求,链上的对象都有机会来处理这一请求,而客户端不需要知道谁是具体的处理对象,让多个对象都有机会处理请求,避免请求的发送者和接收者之间的耦合关系,将这个对象连成一条调用链,并沿着这条链传递该请求,直到有一个对象处理它才终止有两个核心行为:一是处理请求,二是将请求传递到下一节点应用场景Apache Tomcat 对 Encoding 编码处理的处理,SpringBoot里面的拦截器、过滤器链 在请求处理者不明确的情况下向多个对象中的一个提交请求 如果有多个对象可以处理同一个.原创 2020-11-11 10:40:33 · 68 阅读 · 0 评论 -
设计模式之——桥接模式
与适配器模式类似,包括以后经常会遇到意思接近一样的设计模式,因为人们往往就是多个模式混用,且根据不同的场景进行搭配,桥接设计模式也是结构型模式,将抽象部分与实现部分分离,使它们都可以独立的变化通俗来说,是通过组合来桥接其它的行为/维度应用场景系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性 不想使用继承导致系统类的个数急剧增加的系统 有时候一个类,可能会拥有多个变化维度,比如啤酒,有不同的容量和品牌,可以使用继承组合的方式进行开发,假如维度很多,就容易出现类的膨胀,使用桥接模式就可以原创 2020-11-10 17:31:37 · 70 阅读 · 1 评论 -
设计模式之——组合模式
组合模式又叫部分-整体模式,将对象组合成树形结构以表示“部分-整体”的层次结构,可以更好的实现管理操作,组合模式使得用户可以使用一致的方法操作单个对象和组合对象,部分-整体对象的基本操作多数是一样的,但是应该还会有不一样的地方核心:组合模式可以使用一棵树来表示应用场景银行总行,总行有前台、后勤、网络部门等,辖区下还有地方分行,也有前台、后勤、网络部门,最小的分行就没有子分行了 公司也是,总公司下有子公司,每个公司大部分的部门都类似 文件夹和文件,都有增加、删除等api,也有层级管理关系原创 2020-11-10 17:16:09 · 128 阅读 · 0 评论 -
设计模式之——享元模式
主要用于减少创建对象的数量,以减少内存占用和提高性能, 它提供了减少对象数量从而改善应用所需的对象结构的方式。享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象应用场景JAVA 中的 String,如果字符串常量池里有则返回,如果没有则创建一个字符串保存在字符串常量池里面 数据库连接池、线程池等 如果系统有大量相似对象,或者需要用需要缓冲池的时候可以使用享元设计模式,也就是大家说的池化技术 如果发现某个对象的生成了大量细粒度的实例,并且这些实例除了几个参数外基本是相同的,如果原创 2020-11-10 17:04:19 · 68 阅读 · 0 评论 -
设计模式之——门面模式
门面模式(Facade Pattern)又叫外观模式,提供了一个统一的接口,用来访问子系统中的一群接口。其主要特征是定义了一个高层接口,让子系统更容易使用,属于结构性模式原文: Provide a unified interface to a set of interfaces in a subsystem.Facade defines a higher-level interface that makes the subsystem easier to use.解释:要求一个子系统的外部与其内部的原创 2020-11-10 10:05:02 · 700 阅读 · 1 评论 -
设计模式之——建造者模式
建造者模式(Builder Pattern)是将一个复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表示,属于创建型模式。使用建造者模式对于用户而言只需指定需要建造的类型就可以获得对象,建造过程及细节不需要了解建造者模式适用于创建对象需要很多步骤,但是步骤的顺序不一定固定。如果一个对象有非常复杂的内部结构(很多属性),可以将复杂对象的创建和使用进行分离先来看一下建造者模式的类图建造者模式的设计中主要有四个角色:1、产品(Product):要创建的产品类对象2、建造原创 2020-11-10 09:50:31 · 164 阅读 · 0 评论 -
设计模式之——观察者模式
观察者模式(Observer Pattern)也叫做发布订阅模式,定义了对象之间的一对多依赖,让多个观察者对象同时监听一个主体对象,当主体对象发生变化时,它的所有依赖者(观察者)都会收到通知并更新,属于行为型模式。观察者模式主要用于在关联行为之间建立一套触发机制的场景应用场景微信朋友圈动态通知、csdn生态圈消息通知、邮件通知、广播通知等等Guava API代码实现引入maven依赖的jar包//引入maven的jar包<dependency> <g..原创 2020-11-10 09:24:38 · 63 阅读 · 0 评论 -
设计模式之——装饰者模式
装饰者模式(Decorator Pattern)是指在不改变原有对象的基础之上,将功能附加到对象上,提供了比继承更有弹性的替代方案(扩展原有对象的功能),属于结构型模式简单的来说就是在原有的基础上锦上添花适用的场景1、用于扩展一个类的功能或给一个类添加附加职责2、动态的给一个对象添加功能,这些功能可以再动态的撤销代码演示@Datapublic class Member { private String username; private String passwor原创 2020-11-10 09:25:12 · 96 阅读 · 0 评论 -
设计模式之——适配器模式
适配器模式(Adapter Pattern)是指将一个类的接口转换成客户期望的另一个接口,使原本的接口不兼容的类可以一起工作,属于结构型设计模式适用的业务场景1、已经存在的类,它的方法和需求不匹配(方法结果相同或相似)的情况2、适配器模式不是软件设计阶段考虑的设计模式,是随着软件维护,由于不同产品、不同厂家造成功能类似而接口不相同情况下的解决方案。有点亡羊补牢的感觉代码实现接口定义//登录适配器接口public interface LoginAdapter { boo.原创 2020-11-09 17:14:44 · 84 阅读 · 0 评论 -
设计模式之——策略模式
策略模式(Strategy Pattern)是指定义了算法家族、分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的用户应用场景1.代码中有多个类,他们的区别是行为不同,可以用策略模式2.一个系统需要动态地在几种算法中选择一种,需要知道所有的算法经典的业务场景:支付方式代码演示//促销策略抽象接口public interface PromotionStrategy { void doPromotion();}接口实现//优惠券实现p.原创 2020-11-09 17:01:04 · 85 阅读 · 0 评论 -
设计模式之——模版模式
模板模式通常又叫模板方法模式(Template Method Pattern)是指定义一个算法的骨架,并允许子类为一个或者多个步骤提供实现。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤,属于行为型设计模式适用场景:1、一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现2、各子类中公共的行为被提取出来并集中到一个公共的父类中,从而避免代码重复简单来说:就是提取出共通或者共性的一部分内容作为父类,然后让每一个子类去实现共性的逻辑,同时子类可以添加自己的逻辑原创 2020-11-09 16:53:32 · 54 阅读 · 0 评论 -
设计模式之——原型模式
原型模式原型模式(Prototype Pattern)是指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。重点是对象的拷贝适用场景:1、类初始化消耗资源较多2、new 产生的一个对象需要非常繁琐的过程(数据准备、访问权限等)3、构造函数比较复杂4、循环体中生产大量对象时简单克隆(浅克隆)public interface Prototype{ Prototype clone();}创建克隆对象public class ConcreteProto原创 2020-11-09 16:39:00 · 139 阅读 · 0 评论 -
设计模式之——委派模式
委派模式(Delegate Pattern)的基本作用就是负责任务的调用和分配,跟代理模式很像,可以看做是一种特殊情况下的静态代理的全权代理,但是代理模式注重过程,而委派模式注重结果委派其实就是指点江山,叫别人干活,如果他收集结果,然后向领导汇报,例如以下这个很熟悉的场景:老板(Boss)给项目经理(Leader)下达任务,项目经理会根据实际情况给每个员工派发工作任务,待员工把工作任务完成之后,再由项目经理汇报工作进度和结果给老板。老板是不会关心是谁干了什么活,他只关心结果,到底是不是他满意的.原创 2020-11-09 16:26:01 · 74 阅读 · 0 评论 -
设计模式之——代理模式
代理模式(Proxy Pattern)是程序设计中的一种设计模式代理者是指一个类别可以作为其它东西的接口。代理者可以作任何东西的接口:网络连接、存储器中的大对象、文件或其它昂贵或无法复制的资源代理模式指为其他对象提供一种代理,以控制对这个对象的访问。代理对象在客服端和目标对象之间起到中介作用,代理模式属于结构型设计模式应用场景:租房中介、售票黄牛、婚介、经纪人、快递、事务代理、非侵入式日志监听等使用的目的:1.保护目标对象2.增强目标对象代理模式分为:静态代理和动态.原创 2020-11-09 16:18:28 · 63 阅读 · 0 评论 -
设计模式之——工厂模式
简单工厂简单工厂模式(Simple Factory Pattern)是指由一个工厂对象决定创建出哪一种产品类的实例,但它不属于 GOF,23 种设计模式(参考资料:http://en.wikipedia.org/wiki/Design_Patterns#Patterns_by_Type)适用于工厂类负责创建的对象较少的场景,且客户端只需要传入工厂类的参数,对于如何创建对象的逻辑不需要关心代码实现:接口定义:public interface ICourse { /** 录制视频原创 2020-11-09 16:01:28 · 107 阅读 · 0 评论 -
设计模式之——单例模式
单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为应用场景:J2EE标准中的 servletContext、servletContextConfig、Spring 框架中的ApplicationContext、数据库的连接池等等实现思路:一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称);当我们调用这个原创 2020-11-09 15:49:11 · 76 阅读 · 0 评论 -
七大软件设计原则
开闭原则开闭原则(Open-Closed Principle,OCP)是指一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。所谓的开闭,也正是对扩展和修改两个行为的一个原则。强调的是用抽象构建框架,用实现扩展细节。可以提高软件系统的可复用性及可维护性。开闭原则,是面向对象设计中最基础的设计原则。它指导我们如何建立稳定灵活的系统,例如:我们版本更新,我尽可能不修改源代码,但是可以增加新功能依赖倒置原则依赖倒置原则(Dependence Inversion Principle,DIP)是指设.原创 2020-11-09 15:25:36 · 89 阅读 · 0 评论