
设计模式
文章平均质量分 94
零到无限大
前进吧!如果你还没有放弃的话。
展开
-
创建型设计模模式---工厂模式
设计模式设计模式七大原则一、开闭-原则 OCP对扩展开放,对修改封闭。在程序需要进行拓展的时候,不能去修改原有的代码,而是要原有的基础上扩展代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。如果一个软件能够满足 OPC 原则,那么它将具有以下两项优点:能够扩展已存在的系统,能够提供新的功能满足新的需求,因此该软件有着很强的适应性和灵活性。已存在的模块,特别是那些重要的抽象模块,不需要被修改,那么该软件就有着很强大的稳定性和持久性。二、单一职责原则 SRP原创 2021-04-01 15:44:08 · 162 阅读 · 0 评论 -
行为型设计模式---解释器模式
解释器模式模式的定义解释器模式(interpreter),给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。模式的主要优点:易于改变和扩展文法。由于在解释器模式中使用类来表示语言的文法规则,因此可以通过继承等机制来改变或扩展文法。每一条文法规则都可以表示为一个类,因此可以方便地实现一个简单的语言。实现文法较为容易。在抽象语法树中每一个表达式节点类的实现方式都是相似的,这些类的代码编写都不会特别复杂,还可以通过一些工具自动生成节点类代码。增加新的解原创 2021-05-03 19:00:02 · 145 阅读 · 0 评论 -
行为型设计模式---备忘录模式
备忘录模式现在市场上很多应用软件都提供了撤回功能,如 IDEA、PS、Eclipse、Notepad++等软件都可以使用 ctrl + n 撤回之前的操作;还比如浏览器的 “后退” 按钮;还比如五子棋、围棋、象棋游戏中的 “悔棋” 操作;还有我们经常玩的那些主机游戏或剧情类游戏都有一个 “存档点” 在游戏角色死亡后,可以读取存档。这些类似的具有备分/恢复操作的场景都是备忘录模式的体现。模式的定义备忘录(Memento)模式,在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这原创 2021-05-01 22:15:20 · 197 阅读 · 0 评论 -
行为型设计模式---访问者模式
访问者模式在现实生活中,可能存在这样一种情况:商场的推销人员针对男士可能推销剃须刀、皮带、电脑等,针对女士可能推销化妆品、口红等。还比如保险代理人,针对买车的推销车险,针对身体条件不好的推销医疗保险,针对银行推销失窃保险,针对商场推销火灾或洪水保险等。还比如我们在软件开发中,有固定的几种数据展示方式:折线图、散点图、关系图;需要根据不同的参数排序展示,如:日期、销量等等;这些数据元素相对稳定而操作多变的数据结构,使用访问者模式处理将会很方便。访问者模式能把处理方法从数据结构中分离出来,并可以根据需要增加原创 2021-04-29 00:48:44 · 187 阅读 · 0 评论 -
行为型设计模式---迭代器模式
迭代器模式集合是编程中最常使用的数据类型之一, 尽管如此, 集合只是一组对象的容器而已。大部分集合使用简单列表存储元素。但有些集合还会使用栈、 树、 图和其他复杂的数据结构。无论集合的构成方式如何, 它都必须提供某种访问元素的方式, 便于其他代码使用其中的元素。 集合应提供一种能够遍历元素的方式, 且保证它不会周而复始地访问同一个元素。如果你的集合基于列表, 那么这项工作听上去仿佛很简单。 但如何遍历复杂数据结构 (例如树) 中的元素呢? 例如, 今天你需要使用深度优先算法来遍历树结构, 明天可能会需要广原创 2021-04-28 00:13:21 · 204 阅读 · 0 评论 -
行为型设计模式---中介者模式
中介者模式在现实生活中,对象与对象之间常常存在着复杂的交互关系,如:公司中员工与员工之间的关系;世界上国家与国家之间的关系;以及草原中动物与动物之间的关系。这种关系一般呈 “网状结构”,每个对象都与多个对象交互,不利于管理,且一旦有修改就会牵连到多个对象,非常复杂。如果我们在这个 “网状结构” 中引入一个管理对象之间的关系的 “中介者”,将 “网状结构” 改为 “星型结构”,将大大降低各个对象之间的耦合度,降低系统的复杂度且方便扩展。如公司的微信群/钉钉群,国际关系中的联合国等等;以下以国际关系为例介绍原创 2021-04-27 00:27:29 · 186 阅读 · 0 评论 -
行为型设计模式---观察者模式
观察者模式在现实生活中存在如下情况,一个对象的行为发生改变可能会影响多个对象的行为。如以下场景:房价上涨会导致已经买房的人高兴,没有买房的人伤心;房价的下跌则正好相反。商品价格和股市的变动同理。还比如数学题中,圆的半价扩大和缩小,必然会导致直径、周长、面积发生变化。同样,在软件系统中也可能存在类时的需求;如:在显示数据的时候,我们可能会存在多种显示方式,如:树状图、折线图、饼状图、结构图等等;在改变数据模型的同时,需要同时改变多种显示方式;关于这类一个对象行为发生改变会影响多个对象的行为的情况,我们可以采原创 2021-04-26 00:16:28 · 264 阅读 · 0 评论 -
行为型设计模式---状态模式
状态模式在现实生活中,我们可以会遇到如下情景:ERP系统中,一个批文的状态有:未办、正在办理、正在批示、正在审核、已经完成 等各种状态并且根据各个状态还有对应的行为。还比如,煎牛排根据不同的时间,火候获取到不同的牛排熟度【几成熟】,在比如快递根据不同情况执行不同从处理,如:出库中【商品出库并记录日志】、运输中【检测商品运行状况及运输地址】、已到达【显示代收点并通知客户提取】。这类根据不同情况做出不同行为的对象我们称之为 “有状态对象”,而把影响行为的一个或多个动态变化的属性称之为 “状态”。当有状态的对象原创 2021-04-24 00:33:43 · 204 阅读 · 0 评论 -
行为型设计模式---责任链模式
责任链模式在现实生活中,经常会遇到一件事情经过多个对象处理的场景。比如公司员工请假可能需要经过多个领导批准,每个领导批准的范围不一样【项目经理2天以内,部门经理处理一周以内的,总经理处理更长时间的】;还比如产品的售后问题,一般客服处理,客服处理不了就交给经理处理,经理处理不了就只能交给总经理处理;还比如去银行的取款,一般小额度的取款可以直接在前台处理,如果取款量很大就有可能需要大堂经理处理,如果量大到大堂经理都处理不了就只能找他的上层领导了。像这种一条链式的,一个事件多个对象处理的就是责任链模式。在 J原创 2021-04-21 22:00:55 · 994 阅读 · 0 评论 -
行为型设计模式---命令模式
命令模式在现实生活中,我们可以会遇到这种情况:在路边烧烤摊吃烧烤时,人少的时候还好,人多的时候就有可能出现师傅弄错顾客的口味【要辣/不要辣】或 忘记顾客是否已给钱 或者弄错烤串的数量等等一系列问题;而在烧烤店中却少有这种情况,在烧烤店中服务员通常会把顾客的需求记录下来,将记录交给厨师处理,顾客也不必直接和厨师打交道;这种行为模式就是命令模式的体现。还比如看电视时我们可以通过遥控来控制频道切换,音量的调节;通过空调遥控控制空调的温度、风向、模式等等。在软件开发系统中,“方法的请求者” 与 “方法的实现者”原创 2021-04-19 23:33:19 · 216 阅读 · 0 评论 -
行为型设计模式---策略模式
策略模式在现实生活中,我们可能会遇到以下场景:节假日回家我们可以坐飞机、坐火车、坐大巴、自己开车、拼车等等;超市节假日促销可以采用打折、满300减100、送积分、送商品等等;比如市场上虚拟货币的一些量化工具的交易策略如高频、多元、马尔丁格、等等;还比如游戏的不同模式的玩法等等;关于这类问题,如果使用多重条件判断语句【if…else/switch…case】实现(即硬编码),不但使条件语句变得很复杂,而且增加、删除或更换算法要修改原代码,不易维护,违背开闭原则。如果采用策略模式就能很好解决该问题。模式的定原创 2021-04-18 00:02:53 · 183 阅读 · 0 评论 -
行为型设计模式---模板方法模式
行为型模式行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。模板方法模式在现实生活中存在这样一类情景:去银行或营业厅办业务一般有如下流程:取号、排队、办理业务、然后对服务进行评价,其原创 2021-04-17 00:08:30 · 197 阅读 · 0 评论 -
结构型设计模式---组合模式
组合模式在现实生活着,“整体-部分” 的这种关系是很常见的。例如,卖电脑的商家,可以卖单独配件也可以卖组装整机,又如复制文件,可以一个一个文件复制粘贴还可以整个文件夹进行复制,再比如文本编辑,可以给单个字加粗、变色、改字体,当然也可以给整段文字做同样的操作。这些其本质都是同样的问题,对于这些简单对象与复合对象的处理,如果使用组合模式来实现将会很方便。定义与特点组合模式有时又叫 ”整体-部分“ 模式,它是一种将对象组合成树状层次结构的模式,用来表示 “整体-部分” 的关系,使用户对单个对象和组合对象具有原创 2021-04-15 13:06:35 · 437 阅读 · 0 评论 -
结构型设计模式---享元模式
享元模式在程序设计中,有时我们会面临着要创建大量相同或相似对象实例的问题。如果创建太多的相似对象实例会耗费很多系统资源,将会很影响系统的性能。例如:围棋中的黑白棋子,跳棋中的六色的棋子,内容相似的博客网站,教师里的座子椅子;公司标配的电脑等等。这些对象大都相似,如果把它们相同的部分提取出来共享,则能够节省大量的系统资源【如围棋抽出黑白棋子,跳棋抽出六色棋子,维护到一个公共的缓存对象中。】,这类问题可以通过享元模式来处理。在 Java 语言中,String 类型就是使用了享元模式。String 对象是原创 2021-04-13 23:20:10 · 184 阅读 · 0 评论 -
结构型设计模式---外观模式
外观模式在现实生活中,常常存在办事较复杂的例子;如去医院看病,需要挂号、门诊、划价、化验、收费、取药等,病人需要与多个部门打交道,这不是一件容易的事。又比如我们办房产证或者注册一个网站等都需要与多个部门联系。软件设计也是这样,随着需求的扩展功能的增多,系统会原来越复杂,设计师处理复杂系统的一个常见方法便是将其“分而治之”,把一个系统划分为几个较小的子系统,随着子系统会越来越多,客户对系统的访问也变得越来越复杂。这时如果系统内部发生改变,客户端也要跟着改变,这违背了“开闭原则”,也违背了“迪米特法则”,所原创 2021-04-12 22:06:18 · 254 阅读 · 0 评论 -
结构型设计模式---装饰模式
装饰模式在现实生活中,我们通常遇到过这样的事情:买肠粉的时候,肠粉中可以加鸡蛋、也可以加香菇、猪肉、香肠、虾米等等;汉堡有单层汉堡、双层汉堡、三层汉堡,也可以加培根、生菜等等;煎饼果子可以加鸡蛋、肉松、火腿、培根等等。这些在基础商品上加入一些配料,相应的价格也会增加;这类现象都是装饰模式的体现。在软件开发过程中,有时想用一些现存的组件。这些组件可能只是完成了一些核心功能。但在不改变其结构的情况下,可以动态地扩展其功能。这些都可以釆用装饰器模式来实现。而在 Java 语言中,装饰模式使用最著名的莫过于原创 2021-04-10 19:02:03 · 211 阅读 · 0 评论 -
结构型设计模模式---桥接模式
桥接模式在现实生活中,某些事物具有两个或多个纬度的变化。如:手机既可以按品牌分,又可以按尺寸分,还可以按颜色分;文字既可以按字体分,也可以按字号分;图形可以按形状分,也可以按颜色分等等。如果使用继承的方式来描述,m种形状 和 n种颜色的图形就有 m*n 种组合,不但产生的子类繁多,而且扩展困难。而桥接模式则可以很好的解决这些问题。定义与特点桥接模式,将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变纬度的耦合。桥接模式遵循了 组合/聚合复用原则、原创 2021-04-09 22:30:38 · 192 阅读 · 0 评论 -
结构型设计模模式---适配器模式
适配器模式适配器:在现实生活中,经常出现两个对象因不兼容而不能一起工作的实例,这时就需要第三者进行适配。如我们生活着的:现在部分手机采用的是 type-c 接口,而那种圆形的耳机就不太适合,我们就需要一个适配器来适配;又比如,我们的笔记本电脑使用的是直流电,在接交流电源时就需要一个电源适配器等等。定义与特点将一个类的接口转化成客户端希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类结构型模式和对象结构型模式两种,前者类之间的耦合度比后者高,且要求程序员了解现原创 2021-04-07 23:35:43 · 192 阅读 · 0 评论 -
结构型设计模模式---代理模式
结构型模式结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者采用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度要低,满足 ”合成复用原则“,所以对象结构型模式比类结构型模式具有更大的灵活性。代理模式定义与特点由于某些原因需要给某对象提供一个代理来控制对该对象的访问。这时,访问对象不适合或者不能够直接引用目标对象,代理对象就作为访问对象和目标对象之间的中介。如:现实生活中我们购买火车票不一定要去火车站,还可以原创 2021-04-07 10:47:50 · 171 阅读 · 0 评论 -
创建型设计模模式---原型模式
原型模式模式的定义与特点原型模式主要用于对象的复制,用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。优点:Java自带的原型模式基于内存二进制流的复制,在性能上比直接 new 一个对象更加优良。可以使用深克隆方式保存对象的状态,使用原型模式将对象复制一份,并将其状态保存起来,简化了创建对象的过程,以便在需要的时候使用(例如恢复到历史某一状态),可辅助实现撤销操作。原创 2021-04-02 13:15:42 · 132 阅读 · 0 评论 -
创建型设计模模式---建造者模式
建造者模式模式的定义与特点建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。生活中这样的例子很多,如游戏中的不同角色,其性别、个性、能力、脸型、体型、服装、发型等特性都有所差异;还有汽车中的方向盘、发动机、车架、轮胎等部件也多种多样;每封电子邮件的发件人、收件人、主题、内容、原创 2021-04-02 13:12:00 · 284 阅读 · 0 评论 -
创建型设计模模式---单例模式
单例模式定义与特点单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。例如,Windows 中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示内容的不一致等错误。在计算机系统中,还有 Windows 的回收站、操作系统中的文件系统、多线程中的线程池、显卡的驱动程序对象、打印机的后台处理服务、应用程序的日志对象、数据库的连接池、网站的计数器、Web 应用的配置对象、应用程序中的对话框、系统中的缓存等常常被设计原创 2021-04-02 13:10:26 · 163 阅读 · 0 评论 -
创建型设计模模式---抽象工厂模式
抽象工厂模式模式的定义与特点抽象工厂(AbstractFactory)模式的定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。即:提供一个创建产品族的接口,其每个子类可以生产一系列相关的产品。抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。上面两种模式不管工厂怎么拆分抽象,都只是针对一类产品 Coffee 。在上述的场景上继续延伸:随着咖啡工厂做大做强,引入原创 2021-04-02 13:08:06 · 179 阅读 · 0 评论 -
设计模式七大原则
设计模式七大原则一、开闭-原则 OCP对扩展开放,对修改封闭。在程序需要进行拓展的时候,不能去修改原有的代码,而是要原有的基础上扩展代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。如果一个软件能够满足 OPC 原则,那么它将具有以下两项优点:能够扩展已存在的系统,能够提供新的功能满足新的需求,因此该软件有着很强的适应性和灵活性。已存在的模块,特别是那些重要的抽象模块,不需要被修改,那么该软件就有着很强大的稳定性和持久性。二、单一职责原则 SRP单一职责原创 2021-04-02 09:07:25 · 179 阅读 · 0 评论