设计模式
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。
待烟火清凉
让将来的你感谢现在努力的自己!!!
展开
-
备忘录设计模式
场景: 录入大批人员资料,正在录入当前人资料时,发现上一个人录错了,此时需要回复上一个人的资料,在进行修改。 word文档编辑时,忽然电脑死机或者断电,在打开时,可以看到word提示你恢复到以前的文档核心: 就是保存某个对象内部状态的拷贝,这样以后就可以将该对象恢复到原先状态使用场景: 1.棋类游戏中的悔棋 2.普通软件中的撤销操作 3.数...原创 2018-05-10 14:41:36 · 216 阅读 · 0 评论 -
观察者设计模式
场景: 聊天室程序的创建、服务器创建好后A,B,C三个客户端来连接来公开聊天,A向服务器发送数据,服务器端聊天数据该百年,我们希望将这些聊天数据分别发给其他在线用户。也就是说,每个客户端需要封信服务器端得数据。 网站上很多人订阅了 "JAVA主题" 的新闻。当有这个主题新闻时,就会将这些新闻发给所有订阅的人。 大家一起玩cs是,服务器需要将每个人的方位变化发给所有的客户使用场景:...原创 2018-05-10 14:34:14 · 257 阅读 · 0 评论 -
状态设计模式
场景: 电梯的运行 维修,正常,自动开门,自动关门,向上运行,向下运行,消防状态 红绿灯 红灯,黄灯,绿灯 网上购物等 下单,已付款,已发货,送货中,已收货使用场景: 1.银行系统中账号状态管理 2.OA系统中公文状态的管理 3.酒店系统中,房间状态的管理 4.线程对象各状态之间的切换类图: 实现:pac...原创 2018-05-10 14:20:59 · 181 阅读 · 0 评论 -
模板方法设计模式
介绍: 模板方法模式是编程中经常用的模式,它定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现。这样,新的子类可以在不改变一个算法结构的前提下重新定义该算法的某些特定步骤。核心: 处理某个流程的代码已经具备,但是其中某个节点的代码暂时不能确定,因为采用工厂方法模式,将这个节点的代码实现转移给子类完成。即:处理步骤父类中定义好,具体实现延迟到子类中定义什么时候用到模板方法模式: ...原创 2018-05-10 14:13:06 · 160 阅读 · 0 评论 -
策略设计模式
场景: 某个市场人员接到单后的报价策略(CRM常见)。报价策略很复杂,可以简单作如下分类: 普通客户小批量报价,普通客户大批量报价,老客户小批量报价,老客户大批量报价 具体选用哪个报价策略,这需要根据实际情况来定。这时候,我们采用策略模式即可。本质: 分离算法,选择实现使用场景: 1.javase中的GUI编程,布局管理 2.Sprin...原创 2018-05-10 14:03:30 · 217 阅读 · 0 评论 -
访问者设计模式
动机: 对于存储在一个集合中的对象,他们可能具有不同的类型(即使有一个公共的接口),对于该集合中的对象,可以接受一类称为访问者的对象来访问,不同的访问者其访问方式也有所不同。定义: 表示一个作用于某对象结构中的各元素的操作,它使我们可以在不改变某个元素类的前提下定义作用于这些元素的新操作。使用场景(应用范围非常窄,了解): 1.xml文档解析器设计 2.编译...原创 2018-05-10 13:54:58 · 168 阅读 · 0 评论 -
命令设计模式
介绍: 将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作,也称之为:动作action模式,失误transaction模式。使用场景: 1.Struts2中,action的整个调用过程中就有命令模式 2.数据库事务机制的底层实现 3.命令的撤销与恢复结构: Command抽象命令类 Con...原创 2018-05-10 13:42:58 · 189 阅读 · 0 评论 -
中介者设计模式
场景:假如没有总经理,下面三个部门:财务部,市场部,研发部。财务部要发工资,让大家核对公司需要跟市场部和研发部都通气;市场部要接个新项目,需要研发部处理技术、需要财务部出资金。市场部跟各个部门打交道。虽然三个部门,关系非常乱。实际上,公司都有总经理,各个部门有什么事情都通报到总经理这里,总经理在通知各个相关部门。本质:解耦多个同事对象之间的交互关系。每个对象都持有中介者对象的引用,只跟中介者对象打...原创 2018-05-07 15:28:24 · 305 阅读 · 0 评论 -
迭代器设计模式
weis迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。迭代器修改了常规指针的接口,所谓迭代器是一种概念上的抽象:那些行为上像迭代器的东西都可以叫做迭代器。然而迭代器有很多不同的能力,它可以把抽象容器和通用算法有机的统一起来。类图:实现:迭代器接口:package com.gcxzflgl.iterator;/**...原创 2018-05-07 15:12:19 · 219 阅读 · 0 评论 -
责任链设计模式
定义:将能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求,如果能则处理,如果不能则传递给链上的下一个对象。使用场景:1.java中,一场机制就是一种责任链模式,一个try可以对应多个catch,当一个不匹配,就会找下一个。2.javascript中,事件的冒泡和捕获机制。JAVA语言中,事件的处理采用观察者模式。3.servlet开发中,过滤器的链...原创 2018-05-07 15:03:48 · 467 阅读 · 0 评论 -
享元设计模式
场景:内存属于稀缺资源,不要随便浪费,如果有多个完全相同的对象或者相似的对象,我们可以通过享元模式,节省内存。 核心:享元模式以共享的方式高效地支持大量细粒度对象的重用。享元对象能做到共享的关键是区分了内部状态和外部状态。 内部状态:可以共享,不会随环境变化而改变 外部状态,不可以共享,会随环境变化而改变应用场景:1.享元池由于共享的特性,可以在任何池中操作,比如:线城...原创 2018-04-23 15:51:07 · 244 阅读 · 0 评论 -
外观设计模式
使用场景:开发中各种技术框架都有外观模式的使用,比如:jdbc封装,commons中DBUtils等等类图:package com.gcxzflgl.facade;public interface 工商局 { void checkName(); //核名}class 海淀区工商局 implements 工商局 { @Override public void checkName...原创 2018-04-23 15:33:11 · 153 阅读 · 0 评论 -
装饰设计模式
职责:动态的为一个对象增加新的功能。装饰模式是一种用于代替继承的技术,无需通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,同事避免类型体系的快速膨胀。使用场景:1.IO流中输入流和输出流2.Swing包中图形界面构件功能3.Servlet API中济公了一个request对象的Decorator设计模式的默认实现类HttpServletRequestWrapper,...原创 2018-04-23 14:56:46 · 193 阅读 · 0 评论 -
组合设计模式
使用场景:1.把部分和整体的关系用树形结构来展示,从而使客户端可以使用统一的方式处理对象和整体对象。2.操作系统的资源管理器3.GUI中容器层次图4.xml文件解析5.OA系统中,组织结构的处理6.junit单元测试框架,底层设计就是典型的组合模式组合模式的核心:抽象构件角色:定义了叶子和容器构件的共同点叶子构件角色:无子节点容器构件角色:有容器特征,可以包含子节点类图:模拟电脑杀毒为例:抽象构件...原创 2018-04-23 14:38:21 · 954 阅读 · 0 评论 -
桥接设计模式
桥接的应用场景:1.jdbc驱动程序2.AWT的Peer架构3.银行日志管理: 格式分类:操作日志、交易日志、异常日志 距离分类:本地记录日志、异地记录日志4.人力资源系统中的奖金计算: 奖金部门:个人奖金、团体奖金、激励奖金 部门分类:人事部门、销售部门、研发部门5.oa系统的消息处理: 业务类型:普通消息、加急消息、特级消息...原创 2018-04-23 14:26:54 · 232 阅读 · 0 评论 -
代理设计模式
代理模式分为:静态代理和动态代理代理的核心作用:通过代理,控制对对象的访问。可以详细控制某个对象的方法。在调用这个方法前做前置处理,调用这个方法后做后置处理。(即:AOP的微观实现!)代理的核心角色:抽象角色:定义代理角色和真实角色的公共对外方法。真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用,关注真正的业务逻辑!代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务...原创 2018-04-23 14:05:56 · 165 阅读 · 0 评论 -
适配器设计模式
什么是适配器模式?将一个类的接口转换成客户希望的另一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。模式中的角色:目标接口(target):客户所期待的接口。目标可以是具体的或者抽象的类,也可以是接口。需要适配的类(Adaptee):需要适配的类或适配者类。适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口类图:以键盘和pc操作为例创建...原创 2018-04-23 12:14:53 · 241 阅读 · 0 评论 -
原型设计模式
原型模式:通过new产生一个对象需要非常繁琐的数据准备和访问权限,则可以使用原型模式。java中的克隆技术,以某个对象为原型,复制出新的对象。显然,新的对象具备原型对象的特点。优势有:效率高(直接克隆,避免了重新执行构造过程步骤)。克隆类似于new,但不同于new。new创建新的对象属性采用的是默认值。克隆出的对象的属性值完全和原型相同。并且克隆出的新对象改变不会影响原型对象,然后再修改克隆对象的...原创 2017-08-17 16:29:55 · 208 阅读 · 0 评论 -
建造者设计模式
建造模式本质:分离了对象子组件的单独构造(由Builder来负责)和装配(Director)负责。从而可以构造出复杂的对象。适用于构造复杂情况由于时间了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象;相同的构造器,不同的装配顺序也可以做出不同的对象,也就是实现了构建算法、装配算法的解耦,实现了更好的复用。应用场景:1.StringBuilder类的append方法2.sql中的P...原创 2017-08-11 09:36:18 · 230 阅读 · 0 评论 -
工厂设计模式
工厂设计模式实现了创建者和调用者的分离详细分为:简单工厂,工厂方法,抽象工厂、核心本质:实例化对象,用工厂方法代替new操作。将选择实现类、创建对象统一管理和控制。从而将调用者跟我们现实类解耦。要点:简单工厂:虽然某种程度不符合设计原则,但实际使用最多。工厂方法:不修改已有类的前提下,通过增加新的工厂类实现扩展。抽象工厂:不可以增加产品,可以增加产品族!应用场景:1.jdk中Calenlar.ge...原创 2017-08-10 16:46:39 · 213 阅读 · 0 评论 -
单例设计模式
单例核心作用保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。单例模式的优点:由于只生成一个实例,减少了系统性能的开销,当一个对象的产生需要比较多的资源时,如读取配置、产生其他依赖对象时则可以在应用启动时直接产生一个单例对象,然后永久的驻留内存的方式来解决。常见的应用场景:1.windows的Task manager(任务管理器)就是很典型的单例模式。2.windows的Recycle ...原创 2018-04-19 16:18:42 · 180 阅读 · 0 评论