
设计模式
整理JAVA设计模式
小萤哥
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java设计模式全集-备忘录模式(Memento)
备忘录模式(Memento) 所谓的备忘录,顾名思义,可以用来备份的东西,比如游戏的存档,数据库的快照等等,就是对某一项内容进行数据备份,在必要时可以通过这个备份进行数据的恢复或者回退,将数据恢复或者回退到备份前的状态 简单来说,以前有些游戏,需要到存盘点才可以存盘,这时候你没有存盘,跑去打BOSS,结果又没打赢,死了。这时候读取的存档,就是一份备忘录 Java的序列化接口 要实现java的默认序列化与反序列化,则必须实现Serializable接口,建议添加serialVersionUID,且生原创 2020-05-19 00:11:46 · 279 阅读 · 0 评论 -
Java设计模式全集-状态模式(State)
状态模式(State) 状态模式也是一种行为型设计模式,它可以将一些相互间无关联的内容进行解耦,对于平时写出的一大堆的if else有优化作用,和策略模式有点相近,都是对不同的代码分支进行去耦合,但是不同的在于策略模式更加注重一套完整的策略解决方案,并不太关心原来入口处的逻辑,但是相对于策略模式来说,状态模式里有了一个Context的概念,状态的解耦合对象其实是一个固定的Context,其中不同的状态可能还会关心上下文中的一些方法结果 打个比方,策略模式就好比,我去登录某个网站,网站给我的密码进行加密,用原创 2020-05-15 21:31:44 · 451 阅读 · 0 评论 -
Java设计模式全集-命令模式(Command)
命令模式(Command) 命令模式的核心思想是将命令的发送者与命令的执行者进行了解耦,方便对二者进行扩展 其中有几个比较重点的角色 1.Command 即命令的接口或者抽象,所有的命令由其扩展 2.Receiver 命令的接收者,执行者,它负责对由Command扩展出来的命令做出具体的执行操作 3.ConcreteCommand 译成中文为–具体命令,由Command扩展而来,定义某个具体的命令,内部持有一个recevier对象,将Command和Receiver连接起来,起到一个桥梁作用,将具体的原创 2020-05-12 19:05:11 · 277 阅读 · 0 评论 -
Java设计模式全集-桥接模式(Bridge)
桥接模式(Bridge) 将抽象部分与具体实现分开,通过聚合的方式代替继承,防止因为类不断继承产生类爆炸 比如手机有很多品牌,手机还可以安装游戏,游戏又有不同的开发厂商,将游戏进行抽象,聚合到手机类中,可以通过安装游戏的方法,将不同的游戏对象装入手机对象中,获得不同的对象结果 整体上与抽象工厂非常相似,但侧重点不同,抽象工厂侧重于对于一组产品的集中式扩展,而桥接模式是为了防止类的继承爆炸,是为了...原创 2020-05-06 23:55:59 · 559 阅读 · 0 评论 -
Java设计模式全集-模板方法(Template Method)
模板方法(Template Method) 比较常用的设计模式,对于一套固定的流程式的代码,在抽象类中定义流程运转的骨架,由子类来实现具体的细节 典型的像spring 的AbstractApplicationContext的refresh方法 Re ...原创 2020-05-06 22:06:49 · 170 阅读 · 0 评论 -
Java设计模式全集-适配器模式(Adapter)
适配器模式(Adapter) 运用于在现有几套不同的组件,互相间的接口定义不一致,又期望让他们可以协同工作,可以通过实现一套适配器,让本身无法兼容的组件可以协同工作了 mybatis中兼容了很多日志组件,不同的日志组件中又定义了不同的日志级别,因此mybatis定义了一套标准的日志级别,然后针对不同的日志组件,开发一套不同的适配器,让兼容的日志组件得以对应到mybatis的日志级别上 举个例子,...原创 2020-05-06 21:36:18 · 221 阅读 · 0 评论 -
Java设计模式全集-原型模式(prototype)
原型模式(prototype) 又是一种用法比较局限的设计模式,最典型的场景即为java的Cloneable接口,核心思想为提供一个快速创建重复对象的方式 可以快速的通过拷贝方式对现有对象完成快速复制 需要注意浅拷贝与深拷贝的问题 demo 基础数据类型测试 /** * @author Xiaoyingge * @description * @date 2020/5/6 21:06 ...原创 2020-05-06 21:24:44 · 155 阅读 · 0 评论 -
Java设计模式全集-访问者模式(Visitor)
访问者模式(Visitor) 从设计原则上来说,它破了对象的封装性,因为访问者模式将被访问对象的相关属性暴露出来并可以操纵它们,即将对象的定义与它的操作进行了拆分 它适用于类的结构相对固定,但是类属性的操作经常发生变化的场景 如果某个类的属性结构时常发生变化 ,那第它一定不适用于访问者模式 UML 具体角色分工 Visitor:定义为接口或者抽象类,封装了访问所有属性的方法的接口,也是因此...原创 2020-04-26 22:34:17 · 191 阅读 · 0 评论 -
Java设计模式全集-迭代器模式(Iterator)
迭代器模式(Iterator) 迭代器模式用的比较多,像List.iterator()就是使用的迭代器模式,迭代器模式通常用于对于自已定义的容器设计一套遍历方案。因为自己创建实现的容器,只有自己才清楚它的内存存储模型,因此也只有自己清楚对它的数据要进行如何遍历。比如对于树结构,就有中序遍历,前序遍历,后序遍历,因此,通过统一的迭代器接口,即可实现对同一接口抽象的统一遍历要求的封装 定义一个迭...原创 2020-04-26 21:53:31 · 182 阅读 · 0 评论 -
Java设计模式全集-建造者模式(Builder)
建造者模式(Builder) 对于一些属性较多的类,或者构造过程较复杂的类,通过建造者模式可以灵活定义哪些属性需要配置,哪些属性无需配置,同时屏蔽内部的创建逻辑。 通常的做法都是在内部添加一个内部类,通过内部类的方法添加各个属性并返回建造器自己的方式实现链式调用,最后可以在build()方法中实现复杂计算并返回构造好的对象 它和工厂模式的区别在于工厂模式并不关心产品的生产过程,只管找工厂要产品,...原创 2020-04-26 21:36:59 · 154 阅读 · 0 评论 -
Java设计模式全集-代理模式(Proxy)
代理模式(Proxy) 代理模式在Java开发中也算经常使用的,如Spring AOP ,Mybatis Mapper代理 生活中代理模式也非常常见,比如某某食品厂生产了一种新口味巧克力,那自己如何将它从工厂分销到消费者手里呢,让消费者来自己的工厂购买无疑是不合适的,于是乎,某某巧克力全国总代理、全省总代理、全市总代理就出现了,消费者只需要在自己需要的时候,就方便的可以获取到它 代理模式使用场...原创 2020-04-25 17:15:41 · 268 阅读 · 0 评论 -
Java设计模式全集-享元模式(FlyWeight)
享元模式(FlyWeight) 享元模式更多的应该算是一种思想,即对可复用资源的重复利用,例如java的字符串常量池,数据库连接池,线程池等等相关的池化技术都可以算是对享元设计模式的一种运用 demo /** * java字符串常量池的判断 * * @author xiaoyingge * @description * @date 2020/4/25 12:29 */ publi...原创 2020-04-25 12:33:53 · 169 阅读 · 0 评论 -
Java设计模式全集-组合模式(Composite)
组合模式(Composite) 使用场景比较在限,最主要的作用在于描述树形结构 不是特别重要,不做太多篇幅 UML demo 抽象父类 /** * @author xiaoyingge * @description * @date 2020/4/25 11:54 */ public abstract class AbstractTreeNode { protected ...原创 2020-04-25 12:23:53 · 145 阅读 · 0 评论 -
Java设计模式全集-装饰器模式(Decorator)
装饰器模式(Decorator) 对一个类进行不断的装饰,不断的去丰富类的功能,又保证不改动原来的类,即在原来类的基础上,动态的扩展新的功能,这个点听起来与代理模式非常像,但代理模式更加侧重于对类增强部分的处理,即这个类被我代理后,我应该怎样去增强它?装饰器模式则是我有一组已经实现好的增强,这次需要给这个类增加哪一个或者哪几个增强呢? 举个栗子 Tony Stark在山洞中打造出了Mark ...原创 2020-04-24 01:58:12 · 190 阅读 · 0 评论 -
Java设计模式全集-责任链模式(Chain of Responsibility)
责任链模式(Chain of Responsibility) 即将一组处理器通过串行化的方式组装在一起,共同来处理同一个对象,这个对象具体会在哪一个处理器中进行处理是未知的,可以方便的对不同的需求组织不同的处理器实现高度自由化的定制处理策略 UML 从类图上看和策略模式很像,但与策略不同的地方在于,责任链将所有的实现自由的组装到一个链条中,可以是一个遍历的处理器数组,可以是由给每个处理器指...原创 2020-04-24 00:55:52 · 387 阅读 · 0 评论 -
Java设计模式全集-调停者/中介者模式(Mediator)
调停者模式(Mediator) 调停者模式解决多个对象间互相引用,相互出现大量的耦合的场景,通过引入中间的调停者,将所有的调用方进行解耦合 可以将各个类间的相互耦合调整为每一个对象与调停者之间的耦合,调用者只需要向调停者发起请求或者响应调停者的调用即可,减轻了维护工作量 简单的场景就是 一个公司有多个部门,设计部门需要将设计文档交付给开发部门与测试部门,开发部门需要生产功能并交付测试,测试需...原创 2020-04-23 19:32:52 · 248 阅读 · 0 评论 -
Java设计模式全集-门面/外观模式(Facade)
门面/外观模式(Facade) 门面模式,也叫作外观模式,通常来说是为了解除对外调用的复杂性时进行运用,主要的思想是保证内部逻辑对外部调用者的透明,像mybatis对外提供服务,基本上都是由SqlSession统一提供服务,至于一级缓存,二级缓存如果实现,不需要外部开发者进行关心 UML 可能直接从UML图上看不出来什么,那么举一个现实中的例子,像现在很多地方都建立了行政服务大厅,各个政府...原创 2020-04-23 13:16:29 · 152 阅读 · 0 评论 -
Java设计模式全集-工厂模式系列(Factories)
工厂模式系列(Factories) 之所以用factories是因为工厂模式有好几种实现,工厂模式的运用主要的核心在于将一组通用的抽象对象交由工厂去进行具体的实现,屏蔽加工的细节 比如说,我需要一台电脑,那我就去找电脑生产商去买,如果我想买苹果电脑,那么找苹果电脑生产工厂,如果我想买美帝良心想,那么找美帝良心工厂即可 1.简单工厂 简单工厂即在工厂类内部生产指定的产品,对于逻辑基本不变的场景...原创 2020-04-21 21:55:03 · 407 阅读 · 0 评论 -
Java设计模式全集-策略模式(Strategy)
策略模式(Strategy) 也是一种比较简明的设计模式,主要思路是通过一个通用的接口定义某个行为,此行为的主要实现交由不同的策略实现类来进行实现,而调用方只需要选择一个特定的策略进行接口调用,即可得到相应的策略的执行结果 适用场景:不关心策略细节,且要求接口实现可以灵活替换 UML类图 Context: 策略的调用者,它明确一共有哪些策略可以使用 IStrategy:策略接口的定义,...原创 2020-04-20 21:48:47 · 241 阅读 · 0 评论 -
Java设计模式全集-单例模式(Singleton)
单例模式(Singleton) 如果某个对象只需要在应用的生命周期内保持只有一个对象,那么就可以使用单例模式 单例模式的关键点 无法通过new来随意创建对象,构造函数为private 提供获取唯一实例对象的方法,通常是getInstance() 多线程并发的情况下保证安全,不会new出多个实例 尽量避免单例对象被使用者通过反射创建 避免通过反序列化创建单例对象 1. 饿汉式 优点:实现简...原创 2020-04-20 10:44:28 · 180 阅读 · 0 评论 -
Java设计模式全集
起意开始总结下设计模式相关的知识,就从这里开始吧… 1.设计模式分类 创建型模式 结构型模式 行为型模式 2.具体模式的分类 类型 设计模式 创建型 单例、工厂、抽象工厂、建造者、原型 结构型 代理、适配器、桥接、装饰、外观、享元、组合 行为型 策略、命令、责任链、状态、观察者、中介者、迭代器、访问者、解释器、模板、命令 3.各种设计模式 单例设计模式 ...原创 2020-04-20 10:44:09 · 198 阅读 · 0 评论