![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 93
fw19940314
这个作者很懒,什么都没留下…
展开
-
设计模式-责任链模式及应用
日常生活中办理一件事情往往需要一系列的流程,且流程直接还是有顺序的。比如我们去医院看病,首先要挂号,然后再去排号会诊,医生根据病人的情况开具指定的药品,接口病人根据医生开具的药品单去缴费,缴费完成后再去取药窗口排队取药。这一系列的环节都是有顺序,且前后流程直接都是环环相扣的,不能说先完成某项再来处理前面未完成的。软件开发的过程中,也经常会用到此种场景。对于一个对象经过不同的处理器(过滤器)去处理,这里其实就运用到了今天所要讲的设计模式责任链模式。定义责任链也叫职责链,将请求的发送和接收解耦,让多个接收原创 2021-11-06 22:07:20 · 221 阅读 · 0 评论 -
设计模式-访问者模式及应用
在软件开发的过程中,经常会对一个数据结构(对象数据)进行不同的业务操作,被访问的方法也不同。例如我们对一个权限管理系统某一个用户对象做操作,用户的用户名查询、更改,用户的积分查询,用户的权限查询等。为满足不同的业务,且单一职责的原则。都是对一个对象,有不同的操作。现实生活中,比如我们使用某应用软件观看一部电影,对本部电影发表自己的见解评论及评分。每个用户的评价肯定都是不同的,但是评价的对象都是这部电影。 这种被处理的数据相对稳定且唯一,而访问的方式有多种,使用今天所要介绍的设计模式(访问者模式),处理此类原创 2021-11-04 19:40:20 · 188 阅读 · 0 评论 -
设计模式-策略模式及应用
在平时的编码过程中,我们往往会遇到一个接口的实现会有多种,不同的实现(不同的策略)使用在不同的场景中。举个简单的场景,项目中使用到的站内消息,站内消息的存储介质我们可以是关系型数据库(又分不同的厂商),也可以是非关系型数据库。比如新增插入一条消息这个方法,他的实现方式可能就会很多,如我们现实为了满足不同的客户,关系型数据库使用的有mysql、oracel有些客户则使用的是mongonDB非关系型数据库,客户根据自己的需求,我们动态去调整切换,而无需重新开发。不单单是代码层面,比如每年的双十一,我们买一件商原创 2021-11-03 19:52:21 · 237 阅读 · 0 评论 -
设计模式-迭代器模式及应用
在程序设计中,要访问集合对象时。一般通过for循环、foreach、迭代器等方式。Java中的集合提供都有迭代器,例如 Collection、List、Set、Map 都提供了迭代器,我们只需要获取相关迭代器,就可以对元素进行遍历。本文讲解的就是迭代器模式,JDK虽然已经提供了迭代器,自己如何实现迭代器模式,来遍历集合或者聚合的对象。迭代器模式定义与结构迭代器(Iterator)模式的定义:迭代器提供一个顺序方法指定类型聚合对象的操作,而不暴露聚合对象的内部细节。1.迭代器模式的结构:迭代器模式是原创 2021-06-21 22:41:02 · 150 阅读 · 1 评论 -
设计模式-模板模式及应用
一般生活中我们办理一件事需要一套指定的流水线。例如银行办事,需要先去营业厅取号、排队、办理业务、综合评分。这一套固有的流程,取号、排队、综合评分等都是固定的,不同的客户会办理不同的业务,只有这块是没个客户不同的。类似于这种有固定的流水线,在软件设计的过程中,也是时长被使用到的。定义这条流水线的方法为模板方法,执行到每个环节在调取相应方法的函数。在设计模式中,此类的问题为模板方法模式,下面就通过案例来说一下模板方法的使用。定义及结构特点看下GOF《设计模式》一书中的定义:模板方法模式在一个方法中定义一个原创 2021-05-17 22:49:22 · 1125 阅读 · 9 评论 -
设计模式-观察者模式及应用
在现实生活中,任何对象事务都不是孤立的。往往一个对象的改变,可能会造成相关对象的连锁反应。比如说我们日常生活中,参与公共交通的过程。红灯行绿灯行是灌输在每个人的意识中,当路口的红绿灯(对象)是红色时,所有参与这个路口的机动车、行人(对象)都会暂定,等待绿灯的指示的到来。类似于这种案例生活中还有很多,比如我们订阅了某个微信公众号,当公众号主体推送一篇公众号推文。所有的订阅者这时候都会收到此篇文章。程序的设计中,我们也有类似的模式。这就是接下来要说的观察者模式的使用。定义及结构特点观察者(Observe原创 2021-05-12 17:46:32 · 147 阅读 · 1 评论 -
设计模式-代理模式及应用
"代理"反应到生活中,有很多类似的案例。例如之前互联网没有那么发达的时候我们买火车票,除了去火车站买,往往每个区域或者街道会有火车票代售点。各个代售点,就类似于我们的代理模式中的代理对象。完成被代理对象的功能操作(这里就是买车票),代理点的剩余车票数量和火车站买的都是事实的。我从代理售卖窗口也能买到我需要的车票。在程序的设计过程中,我们往往需要一些额外的功能来统计或者做一些其他的业务操作。比如我们记录每个方法的执行时间,如果在每个方法的开始和执行完业务操作的末尾,统计时间并记录下来。这里的冗余代码会很多,原创 2021-04-28 09:18:44 · 81 阅读 · 0 评论 -
设计模式-组合模式及应用
组合模式在我们的生活场景中也有体现,比如说我们的公司组织结构,大的部门中间包含一个个一级部门,一级部门下还有不同的子部门。 或者说我们计算机中的文件系统,根目录下有各文件,文件夹下可以有子文件夹,也可以有文件。子文件夹下也可以有文件夹或者文件。类似于这种树形结构的业务架构,今天所说的组合模式能可好的解决此类问题。组合模式的定义与结构组合(Composite Pattern)模式的定义:将一组对象组织(Compose)成树形结构,以表示一种“部分-整体”的层次结构。使用户对单个对象和组合对象具有一致的访问原创 2021-04-26 23:12:40 · 179 阅读 · 0 评论 -
设计模式-享元模式及应用
在程序开发的过程中,往往会存在大量的重复的对象。重复的创建对象往往需要虚拟机开辟多块内存来存储这些对象,这就造成了内存的浪费。如果流量洪峰过来,而且对于系统的稳定性也是一个挑战。享元模式就可以解决我们所说的问题,“享元”何为享元,就是共享对象。重复的对象,无需重复创建,节约了内存空间。享元的定义与特点 享元模式的定义提出了两种边界的要求,一个是内部状态,一个是外部状态。内部状态指对象共享出来的信息,存储在享元信息内部,并且不回随环境的改变而改变;外部状态指对象得以依赖的一原创 2021-04-22 20:18:07 · 101 阅读 · 0 评论 -
设计模式-外观模式及应用
外观模式,有的资料也叫做“门面模式”,外观模式使用比较简单,使用的频率也不高,主要是这个思想。 举个生活中的例子,我们知道之前如果办理个证件后者手续,没有互联网之前,我们要各个单位部门的跑,可能一趟还不行;之前不是网上吐槽政府机构办事效率的问题,就是为了证明“我是我自己”。 现在各个行业都走上了信息化,不用来回跑,直接在网上就能办好很多事情,当然也不乏需要去现场的。大家手机里都会有支付宝这个APP,上面的“市民中心模块”,功能涵盖了很多我们常办的事情,什么生活缴费、原创 2021-04-21 09:25:58 · 144 阅读 · 0 评论 -
设计模式-桥接模式及应用
在了解桥接模式之前,我们试着理解的这个名称的含义。“桥接”(Bridge Design Pattern),有连接引用之意。在GoF的《设计模式》一书中,是这样描述的 “将抽象和实现解耦,让它们可以独立变化”。抽象与实现解耦我的理解是,用连接替换继承,减少父类对子类的侵入性。 另外一种说法是一个事物属性的对维度解耦,举个例子我现在要买一台手机,首先我对手机的颜色有要求,其次我对其拍照的像素也有要有,最后可能我还会对手机的品牌再有些要求。这时候手机这个对象,就抽出了三个维度属性,程序原创 2021-04-19 23:23:29 · 145 阅读 · 0 评论 -
设计模式-适配器模式及应用
生活中经常出现两个“事物”不能直接匹配,需要中间加一层转换层实现原本不兼容的接口或者规范变得通用。例如我们使用的各种电源适配器,还例如我前段时间更换电脑的SSD,应因新的SSD与老的不兼容,中间加了个转换头等等。 在程序软件世界中,同样存在着此问题。我们需要使用某些成熟的组件,但是接口或者方法定义又使得我们无法直接使用,而又不能去修改运行稳定的代码。重新开发的话成本和代价都很高,这可以通过中间加一层适配层来转换组件与新使用方的关系,从而达到复用组件的目的。这就是今天所要说到的适配器模原创 2021-04-14 20:14:53 · 102 阅读 · 0 评论 -
设计模式-装饰器模式及应用
在传统的软件开发过程中,如果想对某一组件扩展相应的功能,首先想到的可能是继承的方式来实现。但是如果要增加一系列的功能的话,随着功能的增多。子类就会很膨胀,而且继承的方式耦合性很高。不便于我们代码后续的扩展,也违背了我们的开闭原则。 举个生活中的例子,我们去奶茶店点杯原味奶茶,如果我们想要加自己喜欢的料,比如有的人可能喜欢红豆,有的人喜欢珍珠,有的人两样都加…;这种配料组合搭配的方式很多。而且只是对我一杯奶茶上增加辅料,最后我得到的(对象)还是这杯奶茶。&nb原创 2021-03-30 09:23:53 · 189 阅读 · 0 评论 -
设计模式-建造者模式及应用
在系统开发中,往往会有创建一个复杂对象的需求。这个复杂对象由多个子部件组合而成。例如我们现在需要组装一台计算机,计算机由CPU、主板、硬盘、内存、显示器、鼠标、键盘…等组装而成,而选择需要根据我们真实的使用场景去组装不同配置的电脑。例如同一个公司的同事,不同岗位对计算机配置的需求也不同,研发同学的配置可能会高,而文职类工作的同学配置就无须那么高。公司IT运维部门的同学就需要按照不同需要组装不同配置的电脑。各个组件灵活替换,按需装配。类似于这种场景产品的创建,下面介绍的建造者模式,就能很好的描述此类场景。原创 2021-03-17 19:32:12 · 123 阅读 · 0 评论 -
设计模式-原型模式及应用
在一些系统中,可能会出现大量的相同的对象或者相似的对象,且创建此类对象时,会比较复杂且耗资源。那么使用本节需要讲的原型模式,可以解决此类问题。原型模式原型(Prototype)模式的定义如下:使用已经创建的对象,通过复制原型对象的方式创建相同或者相似的对象。无需知道创建对象的细节。原型模式结构与实现Java 提供了对象的 clone() 方法,所以用 Java 实现原型模式很简单。模式的结构原型模式包含以下主要角色。抽象原型类:规定了具体原型对象必须实现的接口,在这里指Cloneable原创 2021-03-11 22:40:35 · 90 阅读 · 0 评论 -
设计模式-抽象工厂模式及应用
在》中,可以看到一种工厂,只“产生”一种类别的具体产品信息,同种类称为同等级,也就是说:工厂方法模式只考虑生产同等级的产品,但是在现实生活中许多工厂是综合型的工厂,能生产多等级(种类) 的产品,如农场里既养动物又种植物,电器厂既生产电视机又生产洗衣机或空调,大学既有软件专业又有生物专业等。模式的定义与特点抽象工厂(AbstractFactory)模式的定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。抽象工厂模式是工原创 2021-03-09 22:27:07 · 128 阅读 · 0 评论 -
设计模式-工厂方法模式及应用
在 简单工厂模式 一节介绍了简单工厂模式,提到了简单工厂模式违背了开闭原则,而“工厂方法模式”是对简单工厂模式的进一步抽象化,其好处是可以使系统在不修改原来代码的情况下引进新的产品,即满足开闭原则。模式的结构与实现工厂方法模式由抽象工厂、具体工厂、抽象产品和具体产品等4个要素构成。本节来分析其基本结构和实现方法。模式的结构 工厂方法模式的主要角色如下。抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法 newProduct() 来创建产原创 2021-03-05 09:55:39 · 107 阅读 · 2 评论 -
设计模式-简单工厂模式及应用
目录简单工厂模式角色代码案例优缺点应用场景简单工厂模式的典型应用及源码分析简单工厂模式 工厂模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。按实际业务场景划分,工厂模式有 3 种不同的实现方式,分别是简单工厂模式、工厂方法模式和抽象工厂模式。下面将陆续讲解几种设计模式。简单工厂模式(Simple Factory Pattern):定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实原创 2021-03-03 19:27:21 · 191 阅读 · 1 评论 -
设计模式-单例模式及应用
设计模式-单例模式及应用单例模式单例模式三要素8种创建单例对象示例1.恶汉式-静态常量 (线程安全)2.恶汉式-静态变量 (线程安全)3.懒汉式(线程不安全)4.懒汉式-同步方法(线程安全)5.懒汉式-同步代码块(线程安全)6.双重锁检查(线程安全)7.静态内部类(线程安全)8.枚举(线程安全)单例模式的安全性序列化攻击序列化问题解决反射攻击终极方案枚举单例模式总结单例模式应用单例模式所谓的单例模式,就是采取一定的方法保证在整个系统中,对某个类只有一个对象实例;并且该类只提供一个获取该对象实例的方法。原创 2021-02-26 16:40:55 · 135 阅读 · 0 评论