![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
心猿意碼
用心记录
展开
-
设计模式-单例模式
目录一、概念二、单例模式特点三、单例模式的优点四、基本的实现思路五、实现方式(1)懒汉式(2)饿汉式(3)饿汉式(静态代码块)(4)懒汉式(线程安全,同步方法)(4)懒汉式(双重检查)(4)静态内部类(5)枚举一、概念单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这...原创 2019-04-19 18:37:57 · 13249 阅读 · 0 评论 -
备忘录模式
Word、记事本、Photoshop、Eclipse 等软件在编辑时按 Ctrl+Z 组合键时能撤销当前操作,使文档恢复到之前的状态;还有在 IE 中的后退键、数据库事务管理中的回滚操作、玩游戏时的中间结果存档功能、数据库与操作系统的备份操作、棋类游戏中的悔棋功能等都属于这类。备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步 骤,当新的状态无效或者存在问题时,可以...原创 2019-07-08 11:24:37 · 4052 阅读 · 0 评论 -
组合模式-Composite Pattern
目录组合模式的定义与特点组合模式的结构与实现组合模式的应用实例组合模式的应用场景组合模式的扩展树形结构在软件中随处可见,例如操作系统中的目录结构、应用软件中的菜单、办公系统中的公司组织结构等等,如何运用面向对象的方式来处理这种树形结构是组合模式需要解决的问题,组合模式通过一种巧妙的设计方案使得用户可以一致性地处理整个树形结构或者树形结构的一部分,也可以一致性地处理树形结构中...原创 2019-06-24 15:45:51 · 6378 阅读 · 0 评论 -
观察者模式-Observer Pattern
目录模式的定义与特点模式的结构与实现模式的应用实例模式的应用场景模式的扩展观察者模式是使用频率最高的设计模式之一,它用于建立一种对象与对象之间的依赖关系, 一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应。在观察者模式中,发 生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察 者,而且这些观察者之间可以没有任何相互联系,可以根...原创 2019-07-08 16:37:26 · 4428 阅读 · 0 评论 -
命令模式-Command Pattern
在软件开发系统中,常常出现“方法的请求者”与“方法的实现者”之间存在紧密的耦合关系。这不利于软件功能的扩展与维护。例如,想对行为进行“撤销、重做、记录”等处理都很不方便,因此“如何将方法的请求者与方法的实现者解耦?”变得很重要,命令模式能很好地解决这个问题。在现实生活中,这样的例子也很多,例如,电视机遥控器(命令发送者)通过按钮(具体命令)来遥控电视机(命令接收者),还有计算机键盘上的“功能键...原创 2019-07-03 10:22:00 · 5025 阅读 · 0 评论 -
状态模式-State Pattern
在软件开发过程中,应用程序中的有些对象可能会根据不同的情况做出不同的行为,我们把这种对象称为有状态的对象,而把影响对象行为的一个或多个动态变化的属性称为状态。当有状态的对象与外部事件产生互动时,其内部状态会发生改变,从而使得其行为也随之发生改变。如人的情绪有高兴的时候和伤心的时候,不同的情绪有不同的行为,当然外界也会影响其情绪变化。对这种有状态的对象编程,传统的解决方案是:将这些所有可能发生的...原创 2019-07-08 19:06:41 · 4010 阅读 · 0 评论 -
策略模式-Strategy Pattern
在现实生活中常常遇到实现某种目标存在多种策略可供选择的情况,例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等,超市促销可以釆用打折、送商品、送积分等方法。在软件开发中也常常遇到类似的情况,当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如数据排序策略有冒泡排序、选择排序、插入排序、二叉树排序等。在策略模式中,我们可以定义...原创 2019-07-08 22:28:26 · 3713 阅读 · 0 评论 -
模板方法模式-Template Method Pattern
目录模式的定义与特点模式的结构与实现模式的应用实例模式的应用场景模式的扩展在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等,其中取号、排队...原创 2019-07-09 09:27:17 · 3723 阅读 · 0 评论 -
访问者模式
在现实生活中,有些集合对象中存在多种不同的元素,且每种元素也存在多种不同的访问者和处理方式。例如,公园中存在多个景点,也存在多个游客,不同的游客对同一个景点的评价可能不同;医院医生开的处方单中包含多种药元素,査看它的划价员和药房工作人员对它的处理方式也不同,划价员根据处方单上面的药品名和数量进行划价,药房工作人员根据处方单的内容进行抓药。这样的例子还有很多,例如,电影或电视剧中的人物角色,不同的...转载 2019-07-09 15:48:58 · 3668 阅读 · 0 评论 -
Java捕获线程异常的几种方式
转载 https://blog.csdn.net/pange1991/article/details/82115437转载 2019-07-09 17:12:15 · 2974 阅读 · 0 评论 -
装饰模式-Decorator Pattern
装饰模式的定义与特点装饰(Decorator)模式的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。装饰(Decorator)模式的主要优点有:采用装饰模式扩展对象的功能比采用继承方式更加灵活。 可以设计出多个不同的具体装饰类,创造出多个不同行为的组合。其主要缺点是:装饰模式增加了许多子类,如果过度使用会使程序变得很...原创 2019-06-28 17:07:05 · 6299 阅读 · 0 评论 -
外观模式-Facade Pattern
在现实生活中,常常存在办事较复杂的例子,如办房产证或注册一家公司,有时要同多个部门联系,这时要是有一个综合部门能解决一切手续问题就好了。软件设计也是这样,当一个系统的功能越来越强,子系统会越来越多,客户对系统的访问也变得越来越复杂。这时如果系统内部发生改变,客户端也要跟着改变,这违背了“开闭原则”,也违背了“迪米特法则”,所以有必要为多个子系统提供一个统一的接口,从而降低系统的耦合度,这就是外观...原创 2019-06-28 18:34:36 · 6333 阅读 · 0 评论 -
解释器模式-Interpreter Pattern
解释器模式是一种使用频率相对较低但学习难度较大的设计模式,它用于描述如何使用面向 对象语言构成一个简单的语言解释器。在某些情况下,为了更好地描述某一些特定类型的问 题,我们可以创建一种新的语言,这种语言拥有自己的表达式和结构,即文法规则,这些问 题的实例将对应为该语言中的句子。此时,可以使用解释器模式来设计这种新的语言。对解 释器模式的学习能够加深我们对面向对象思想的理解,并且掌握编程语言中文法规...原创 2019-07-04 16:27:34 · 5033 阅读 · 0 评论 -
职责链模式-Chain of Responsibility Pattern
目录模式的定义与特点模式的结构与实现模式的应用实例模式的应用场景模式的扩展在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同,员工必须根据自己要请假的天数去找不同的领导签名,也就是说员工必须记住每个领导的姓名、电话和地址等信息,这增加了难...原创 2019-07-02 15:21:34 · 5576 阅读 · 0 评论 -
中介者模式-Mediator Pattern
如果在一个系统中对象之间的联系呈现为网状结构,对象之间存在大量的多对 多联系,将导致系统非常复杂,这些对象既会影响别的对象,也会被别的对象所影响,这些 对象称为同事对象,它们之间通过彼此的相互作用实现系统的行为。在网状结构中,几乎每 个对象都需要与其他对象发生相互作用,而这种相互作用表现为一个对象与另外一个对象的 直接耦合,这将导致一个过度耦合的系统。如果把这种“网状结构”改为“星形结构”的话...原创 2019-07-08 02:00:38 · 4349 阅读 · 0 评论 -
抽象工厂模式
目录模式的定义与特点模式的结构模式的应用实例模式的应用场景模式的扩展前面介绍的工厂方法模式中考虑的是一类产品的生产,如畜牧场只养动物、电视机厂只生产电视机、计算机软件学院只培养计算机软件专业的学生等。同种类称为同等级,也就是说:工厂方法模式考虑生产同等级的产品,但是在现实生活中许多工厂是综合型的工厂,能生产多等级(种类) 的产品,如农场里既养动物又种植物,电器厂既生产电...原创 2019-05-20 10:54:43 · 6932 阅读 · 0 评论 -
设计模式的六大原则
目录一、单一职责原则(Single Responsibility Principle)二.开闭原则(Open-Closed Principle, OCP)三、里氏代换原则(Liskov Substitution Principle, LSP)四、依赖倒置原则(Dependence Inversion Principle,DIP)五、接口隔离原则(Interface Se...原创 2019-05-16 17:50:03 · 46312 阅读 · 11 评论 -
原型模式
原型模式的定义原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。原型模式的结构由于 java提供了对象的 clone() 方法,所以用 Java 实现原型模式很简单。模式的结构原型模式包含以下主要角色。抽...原创 2019-05-20 20:52:18 · 9736 阅读 · 2 评论 -
建造者模式
没有人买车会只买一个轮胎或者方向盘,大家买的都是一辆包含轮胎、方向盘和发动机等多个部件的完整汽车。如何将这些部件组装成一辆完整的汽车并返回给用户,这是建造者模式需要解决的问题。建造者模式又称为生成器模式,它是一种较为复杂、使用频率也相对较低的创建型模式。建造者模式为客户端返回的不是一个简单的产品,而是一个由多个部件组成的复杂产品。模式的定义与特点建造者模式是较为复杂的创建型模式,它将客...原创 2019-05-21 21:31:51 · 6665 阅读 · 0 评论 -
适配器模式(Adapter)
目录模式的定义与特点模式的结构模式的实现模式的应用场景模式的扩展模式的定义与特点与电源适配器相似,在适配器模式中引入了一个被称为适配器(Adapter)的包装类,而它所包装的对象称为适配(Adaptee),即被适配的类。适配器的实现就是把客户类的请求转化为对适配者的相应接口的调用。也就是说:当客户类调用适配器的方法时,在适配器类的内部将调用适配者类的方法,而这个过...原创 2019-05-22 11:22:49 · 6609 阅读 · 1 评论 -
简单工厂模式(静态工厂方法模式)
目录定义为什么要使用工厂模式模式结构模式分析实例简单工厂模式的优点简单工厂模式的缺点适用环境总结定义简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是...原创 2019-05-17 16:23:07 · 9281 阅读 · 1 评论 -
桥接模式(Bridge)
桥接模式的定义与特点桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。桥接(Bridge)模式的优点是:由于抽象与实现分离,所以扩展能力强;其实现细节对客户透明。缺点是:由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,这增加了系统的理解与设计难度。桥接模...原创 2019-05-22 21:14:28 · 8168 阅读 · 1 评论 -
工厂方法模式
目录定义优缺点模式的结构模型实现模式的应用场景定义工厂方法(FactoryMethod)模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。在简单工厂模式中只提供一个工厂类,该工厂类处于对产品类进行实例化的中心位置,它需要知道每一个产品对象的创建细节,并决定何时实例化...原创 2019-05-18 15:29:39 · 7029 阅读 · 0 评论 -
享元模式-Flyweight Pattern
当一个软件系统在运行时产生的对象数量太多,将导致运行代价过高,带来系统性能下降等问题。例如在一个文本字符串中存在很多重复的字符,如果每一个字符都用一个单独的对象来表示,将会占用较多的内存空间,那么我们如何去避免系统中出现大量相同或相似的对象,同时又不影响客户端程序通过面向对象的方式对这些对象进行操作?享元模式正为解决这一类问题而诞生。享元模式通过共享技术实现相同或相似对象的重用,在逻辑上每一个出现...原创 2019-07-01 15:45:45 · 5635 阅读 · 0 评论 -
代理模式-Proxy Pattern
在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象。例如,购买火车票不一定要去火车站买,可以通过 12306 网站或者去火车票代售点买。又如找女朋友、找保姆、找工作等都可以通过找中介完成。在软件设计中,使用代理模式的例子也很多,例如,要访问的远程对象比较大(如视频或大图像等),其下载要花很多时间。还有因为安全原因需要屏蔽客户端直接访问真...原创 2019-07-02 10:27:10 · 5726 阅读 · 0 评论 -
适配器模式,装饰模式,代理模式异同
https://blog.csdn.net/lulei9876/article/details/39994825转载 2019-07-02 11:03:46 · 64 阅读 · 0 评论 -
迭代器模式-Iterator Pattern
在现实生活以及程序设计中,经常要访问一个聚合对象中的各个元素,通常的做法是将链表的创建和遍历都放在同一个类中,但这种方式不利于程序的扩展,如果要更换遍历方法就必须修改程序源代码,这违背了 “开闭原则”。在软件开发中,我们经常需要使用聚合对象来存储一系列数据。聚合对象拥有两个职责:一 是存储数据;二是遍历数据。从依赖性来看,前者是聚合对象的基本职责;而后者既是可变 化的,又是可分离的。因此,可以...原创 2019-07-07 22:56:43 · 4314 阅读 · 0 评论 -
静态代理和动态代理原理分析
原文https://blog.csdn.net/u013830320/article/details/82820231转载 2019-07-11 10:30:25 · 1432 阅读 · 0 评论