
设计模式
坯子蔡
永远怀着一颗学习的心去行走
展开
-
设计模式二十五之状态模式
设计模式二十五之状态模式1. 模式的定义与特点1.1 模式的定义1.2 模式的特点1.3 模式的使用场景2. 模式的结构与实现2.1 模式的结构2.2 模式的实现 在软件开发过程中,应用程序中的有些对象可能会根据不同的情况做出不同的行为,我们把这种对象称为有状态的对象,而把影响对象行为的一个或多个动态变化的属性称为状态。当有状态的对象与外部事件产生互动时,其内部状态会发生改变,从而使得其行为...原创 2020-03-21 23:03:17 · 142 阅读 · 0 评论 -
设计模式二十四之访问者模式
设计模式二十四之访问者模式1. 模式的定义与特点1.1 模式的定义1.2 模式的特点1.3 模式的使用场景2. 模式的结构与实现2.1 模式的结构2.2 模式的实现 在现实生活中,有些集合对象中存在多种不同的元素,且每种元素也存在多种不同的访问者和处理方式。例如,公园中存在多个景点,也存在多个游客,不同的游客对同一个景点的评价可能不同。 这些被处理的数据元素相对稳定而访问方式多种多样的数...原创 2020-03-21 22:58:28 · 101 阅读 · 0 评论 -
设计模式二十三之责任链模式
设计模式二十三之责任链模式1. 模式的定义与特点1.1 模式的定义1.2 模式的特点1.3 模式的使用场景2. 模式的结构与实现2.1 模式的结构2.2 模式的实现3. 模式在开源软件中的应用3.1 javax.servlet.Filter 类 在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总...原创 2020-03-21 22:48:01 · 241 阅读 · 1 评论 -
设计模式二十二之中介者模式
设计模式二十二之中介者模式1. 模式的定义与特点1.1 模式的定义1.2 模式的特点1.3 模式的使用场景2. 模式的结构与实现2.1 模式的结构2.2 模式的实现 在现实生活中,常常会出现好多对象之间存在复杂的交互关系,这种交互关系常常是“网状结构”,它要求每个对象都必须知道它需要交互的对象。例如,每个人必须记住他(她)所有朋友的电话;而且,朋友中如果有人的电话修改了,他(她)必须告诉其他...原创 2020-03-21 22:43:26 · 118 阅读 · 0 评论 -
设计模式二十一之命令模式
设计模式二十一之命令模式1. 模式的定义与特点1.1 模式的定义1.2 模式的特点1.3 模式的使用场景2. 模式的结构与实现2.1 模式的结构2.2 模式的实现 在软件开发系统中,常常出现“方法的请求者”与“方法的实现者”之间存在紧密的耦合关系。这不利于软件功能的扩展与维护。例如,想对行为进行“撤销、重做、记录”等处理都很不方便,因此“如何将方法的请求者与方法的实现者解耦?”变得很重要,命...原创 2020-03-21 22:37:13 · 142 阅读 · 0 评论 -
设计模式二十之备忘录模式
设计模式二十之备忘录模式1. 模式的定义与特点1.1 模式的定义1.2 模式的特点1.3 模式的使用场景2. 模式的结构与实现2.1 模式的结构2.2 模式的实现 每个人都有犯错误的时候,都希望有种“后悔药”能弥补自己的过失,让自己重新开始,但现实是残酷的。在计算机应用中,客户同样会常常犯错误,能否提供“后悔药”给他们呢?当然是可以的,而且是有必要的。这个功能由“备忘录模式”来实现。 其...原创 2020-03-21 22:26:52 · 90 阅读 · 0 评论 -
设计模式十九之观察者模式
设计模式十九之观察者模式1. 模式的定义与特点1.1 模式的定义1.2 模式的特点1.3 模式的使用场景2. 模式的结构与实现2.1 模式的结构2.2 模式的实现3. 模式扩展3.1 java.util.Observable 类与 Observer 接口 类3.2 com.google.common.*.EventBus 和 @subscribe 在现实世界中,许多对象并不是独立存在的,其中...原创 2020-03-21 22:22:33 · 115 阅读 · 0 评论 -
设计模式十八之解释器模式
设计模式十八之解释器模式1. 模式的定义与特点1.1 模式的定义1.2 模式的特点2. 模式的应用 在软件开发中,会遇到有些问题多次重复出现,而且有一定的相似性和规律性。如果将它们归纳成一种简单的语言,那么这些问题实例将是该语言的一些句子,这样就可以用“编译原理”中的解释器模式来实现了。1. 模式的定义与特点1.1 模式的定义 解释器模式(Interpreter):给分析对象定义一...原创 2020-03-21 22:17:13 · 11459 阅读 · 0 评论 -
设计模式十七之策略模式
设计模式十七之策略模式1. 模式的定义与特点1.1 模式的定义1.2 模式的特点1.3 模式的使用场景2. 模式的结构与实现2.1 模式的结构2.2 模式的实现3. 模式在开源软件中的应用3.1 java.util.Comparator 类3.2 org.springframework.core.io.Resource 类 在现实生活中常常遇到实现某种目标存在多种策略可供选择的情况,例如,出...原创 2020-03-21 22:14:40 · 126 阅读 · 0 评论 -
设计模式十六之迭代器模式
设计模式十六之迭代器模式1. 模式的定义与特点1.1 模式的定义1.2 模式的特点1.3 模式的使用场景2. 模式的结构与实现2.1 模式的结构2.2 模式的实现3. 模式在开源软件中的应用3.1 java.util.List 类 在现实生活以及程序设计中,经常要访问一个聚合对象中的各个元素,如“数据结构”中的链表遍历,通常的做法是将链表的创建和遍历都放在同一个类中,但这种方式不利于程序的扩...原创 2020-03-21 18:08:22 · 102 阅读 · 0 评论 -
设计模式十五之模版方法模式
设计模式十五之模版方法模式1. 模式的定义与特点1.1 模式的定义1.2 模式的特点1.3 模式的使用场景2. 模式的结构与实现2.1 模式的结构2.2 模式的实现3. 模式在开源软件中的应用3.1 java.util.AbstractList 类 在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还...原创 2020-03-21 17:59:29 · 118 阅读 · 0 评论 -
设计模式十四之代理模式
设计模式十四之代理模式1. 模式的定义与特点1.1 模式的定义1.2 模式的特点1.3 模式的使用场景2. 模式的结构与实现2.1 模式的结构2.2 模式的实现2.2.1 静态代理2.2.2 动态代理2.2.3 Cglib 动态代理3. 模式在开源软件中的应用3.1 Spring.AOP3.2 Mybatis 中的应用 在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介...原创 2020-03-21 17:20:41 · 104 阅读 · 0 评论 -
设计模式十三之桥接模式
设计模式十三之桥接模式1. 模式的定义与特点1.1 模式的定义1.2 模式的特点1.3 模式的使用场景2. 模式的结构与实现2.1 模式的结构2.2 模式的实现3. 模式在开源软件中的应用3.1 JDBC API 在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。如何设计类似于 Photoshop 这样的软件,能画不同形状和不同颜色的图形呢?如果用继承方式,m ...原创 2020-03-21 17:00:43 · 177 阅读 · 0 评论 -
设计模式十二之组合模式
设计模式十二之组合模式1. 模式的定义与特点1.1 模式的定义1.2 模式的特点1.3 模式的使用场景2. 模式的结构与实现2.1 模式的结构2.2 模式的实现3. 模式在开源软件中的应用3.1 java.util.HashMap 类3.2 java.util.ArrayList 类 在现实生活中,存在很多“部分-整体”的关系,例如,大学中的部门与学院、总公司中的部门与分公司、学习用品中的...原创 2020-03-21 16:54:33 · 189 阅读 · 0 评论 -
设计模式十一之享元模式
设计模式十一之享元模式1. 模式的定义与特点1.1 模式的定义1.2 模式的特点1.3 模式的使用场景2. 模式的结构与实现2.1 模式的结构2.2 模式的实现3. 模式在开源软件中的应用3.1 java.lang.Integer 类 在面向对象程序设计过程中,有时会面临要创建大量相同或相似对象实例的问题。创建那么多的对象将会耗费很多的系统资源,它是系统性能提高的一个瓶颈。这些对象有很多相...原创 2020-03-21 16:47:25 · 134 阅读 · 0 评论 -
设计模式十之适配器模式
设计模式十之适配器模式1. 模式的定义与特点1.1 模式的定义1.2 模式的特点1.3 模式的使用场景2. 模式的结构与实现2.1 模式的结构2.2 模式的实现3. 模式在开源软件中的应用3.1 org.springframework.web.*.HandlerAdapter 类 在现实生活中,经常出现两个对象因接口不兼容而不能在一起工作的实例,这时需要第三者进行适配。例如,讲中文的人同讲英...原创 2020-03-21 16:11:25 · 114 阅读 · 0 评论 -
设计模式九之装饰者模式
设计模式九之装饰者模式1. 模式的定义与特点1.1 模式的定义1.2 模式的特点1.3 模式的使用场景2. 模式的结构与实现2.1 模式的结构2.2 模式的实现3. 模式在开源软件中的应3.1 java.io.BufferedReader 类3.2 springframework.*.*.TransactionAwareCacheDecorator3.3 org.apache.ibatis.cac...原创 2020-03-21 15:48:16 · 444 阅读 · 0 评论 -
设计模式八之外观模式
八设计模式之外观模式1. 模式的定义与特点1.1 模式的定义1.2 模式的特点1.3 模式的使用场景2. 模式的结构与实现2.1 模式的结构2.2 模式的实现3. 模式在开源软件中的应3.1 org.springframework.jdbc.support.JdbcUtils 类 软件系统中,当一个系统的功能越来越强,子系统会越来越多,客户端对系统的访问也会变得越来越复杂。这时如果系统内部发...原创 2020-03-21 15:22:08 · 187 阅读 · 0 评论 -
设计模式七之原型模式
七设计模式之原型模式1. 模式的定义与特点1.1 模式的定义1.2 模式的适用场景2. 模式的结构与实现2.1 模式的实现 在一些系统中,存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源。所以用原型模式生成对象就比较方便和高效。1. 模式的定义与特点1.1 模式的定义 原型模式(prototype):用一个已经创建好的对象作为原型,通过复制该...原创 2020-03-18 23:03:17 · 106 阅读 · 0 评论 -
设计模式六之单例模式
六设计模式之单例模式1. 模式的定义与特点1.1 模式的定义1.2 模式的特点2. 模式的结构与实现2.1 模式的结构2.2 模式的实现2.2.1 懒汉模式2.2.2 双重检查(Double-Check)2.2.3 静态内部类2.2.4 饿汉式单例2.2.5 防止序列化和反序列化破坏单例2.2.6 通过反射破坏单例2.2.7 枚举单例2.2.8 容器单例2.2.9 ThreadLocal 线程单例...原创 2020-03-18 17:41:44 · 236 阅读 · 0 评论 -
设计模式五之建造者模式
五设计模式之建造者模式1. 模式的定义与特点1.1 模式的定义1.2 模式的特点2. 模式的结构与实现2.1 模式的结构2.2 模式的实现3. 模式在开源软件中的应3.1 java.lang.StrnigBuffer 类3.2 com.squareup.okhttp.Request 类 在软件开发过程中有时需要创建一个复杂的对象,这个复杂对象通常由多个子部件按一定的步骤组合而成。例如,计算机...原创 2020-03-18 17:13:38 · 143 阅读 · 0 评论 -
设计模式四之抽象工厂模式
上面介绍的工厂方法模式中考虑的是一类产品的生产,畜牧场只产动物,洗衣机厂只产洗衣机,计算机软件学院只教计算机软件的学生等。同种类称为同等级,也就是说,工厂方法模式只生产同等级的产品。但是在现实生活中很多工厂都是综合性的工厂,能生产多等级(种类)的产品,如农场里既养动物又种植物,电器厂既生产电视机又生产洗衣机或空调,大学既有软件专业又有生物专业等。本节要介绍的抽象工厂模式将考虑多等级产品的生产,将同一个具体工厂所生产的位于不同等级的一组产品称为一个产品族,图 1 所示的是海尔工厂和 TCL 工厂所生产的电原创 2020-03-18 16:06:34 · 146 阅读 · 0 评论 -
设计模式三之工厂方法模式
在现实生活中社会分工越来越细,越来越专业化。各种产品有专门的工厂生产,彻底告别了自给自足的小农经济时代,这大大缩短了产品的生产周期,提高了生产效率。同样,在软件开发中能否做到软件对象的生产和使用相分离呢?能否在满足“开闭原则”的前提下,客户随意增删或改变对软件相关对象的使用呢?原创 2020-03-15 14:56:49 · 148 阅读 · 0 评论 -
设计模式二之原则与分类
1. 设计模式之六大原则:开闭原则开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类。里氏替换原则里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的...原创 2020-03-15 10:38:28 · 110 阅读 · 0 评论 -
设计模式一之UML类图
1. 统一建模语言简介统一建模语言(Unified Modeling Language,UML)是用来设计软件蓝图的可视化建模语言,1997 年被国际对象管理组织(OMG)采纳为面向对象的建模语言的国际标准。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。统一建模语言能为软件开发的所有阶段提供模型化和可视化支持。而且融入了软件工程领域的新思想、新方法和新技术,使软件设计人员...原创 2020-03-15 10:29:01 · 322 阅读 · 1 评论