Java 设计模式学习总结(下)
(八)模板方法
模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤。

templateMethod()会依次调用operationA(),operationB()。这两个方法,可以为抽象方法,这时,每个扩展子类都必须实现它们。
模板方法中,定义了算法的一系列步骤,这些步骤可以由子类中的重载方法实现。SwingUtilities中的invokeLater,invokeAndWait是比较典型的应用;callback函数,也有模板方法的影子在里面。模板方法与接口相比,它有一定程度限制,同时它有这些优点:某些公共步骤,可以在父类中实现;所有步骤都会执行,但是允许子类修改某些步骤实现。
(九)迭代器与组合模式
迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部实现细节。它主要用于屏蔽集合数据遍历的不一致性,提供统一的接口。使用这个模式,List,Queue,Set等Collection子类拥有统一的遍历方式。

迭代器在Java集合类中普遍使用,Java 5中添加了foreach迭代器语法糖,forEach() Lambda表达式在Java 8中添加,这使得语言表达能力更加强大。
设计原则:一个类只应该有一个引起变化的原因。
组合模式允许你将对象组合成树形结构来表现“整体/部分”层次结构,它能让客户以一致的方式处理个别对象以及对象组合。在c/c++中的树——数据结构,到了Java中,就变成了组合模式了。

叶子节点不包含子节点,而且,add,remove和getChild这些方法也没有意义。
(十)状态模式
状态模式允许对象在内部状态改变时,改变它的行为,对象看起来好像在修改它的类。

状态模式将状态转换放置到子类中,这时候动态的添加类的时候,Context类不需要做修改,只需要修改与其关联的子类。它的缺点是,随着状态的增多,会出现很多的类。
策略模式与状态模式,类图比较相似,但是,它们的应用场景不一样。策略模式由客户端决定该使用哪一个实例,状态模式将状态的转换交给子类。
(十一)代理模式
代理模式是为另一个对象提供的替身或占位符,以控制对这个对象的访问。被代理的对象可以是远程的对象(远程代理)、创建开销大的对象(虚拟代理)或者需要安全访问控制的对象(保护代理)。

装饰者与代理模式的区分:代理的主要目的是控制某个对象的访问;装饰者确实为了给原有的类加上额外的功能。二者实现上,都是通过复合。
(十二)复合模式与MVC模式
复合模式是指多种模式合作,解决现实生活中的某种问题而形成的特定模式。
MVC模式是指模型-视图-控制器模式。它是一个典型的复合模式,包括:策略模式(Controller)、组合模式(View)、观察者(Model)等。
Java 设计模式学习总结(下)的更多相关文章
- Java设计模式学习记录-状态模式
前言 状态模式是一种行为模式,用于解决系统中复杂的对象状态转换以及各个状态下的封装等问题.状态模式是将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象的状态可以灵活多变.这样在客户端使 ...
- Java设计模式学习记录-观察者模式
前言 观察者模式也是对象行为模式的一种,又叫做发表-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式. 咱们目前用的最多的就是各种MQ(Message Queue ...
- Java设计模式学习记录-备忘录模式
前言 这次要介绍的是备忘录模式,也是行为模式的一种 .现在人们的智能手机上都会有备忘录这样一个功能,大家也都会用,就是为了记住某件事情,防止以后自己忘记了.那么备忘录模式又是什么样子的呢?是不是和手机 ...
- Java设计模式学习记录-迭代器模式
前言 这次要介绍的是迭代器模式,也是一种行为模式.我现在觉得写博客有点应付了,前阵子一天一篇,感觉这样其实有点没理解透彻就写下来了,而且写完后自己也没有多看几遍,上次在面试的时候被问到java中的I/ ...
- Java设计模式学习记录-装饰模式
前言 装饰模式也是一种结构型模式,主要是目的是相对于类与类之间的继承关系来说,使用装饰模式可以降低耦合度.JDK中有不少地方都使用到了装饰模式,例如Java的各种I/O流,javax.swing包中一 ...
- java设计模式学习笔记--接口隔离原则
接口隔离原则简述 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应建立在最小的接口上 应用场景 如下UML图 类A通过接口Interface1依赖类B,类C通过接口Interface1依赖类 ...
- java设计模式学习笔记--单一职责原则
单一职责原则注意事项和细节 1.降低类的复杂度,一个类只负责一项职责 2.提高可读性,可维护性 3.降低变更引起的风险 4.通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单 ...
- java设计模式学习笔记--浅谈设计模式
设计模式的目的 编写软件的过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战.设计模式为了让程序具有更好的 1.代码重用性(即:相同功能的代码,不用多次编写) ...
- Java设计模式学习资源汇总
本文记录了Java设计模式学习书籍.教程资源.此分享会持续更新: 1. 设计模式书籍 在豆瓣上搜索了一把,发现设计模式贯穿了人类生活的方方面面.还是回到Java与程序设计来吧. 打算先归类,再浏览,从 ...
- Java设计模式学习记录-模板方法模式
前言 模板方法模式,定义一个操作中算法的骨架,而将一些步骤延迟到子类中.使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤. 模板方法模式 概念介绍 模板方法模式,其实是很好理解的,具体 ...
随机推荐
- iOS 开发--转场动画
"用过格瓦拉电影,或者其他app可能都知道,一种点击按钮用放大效果实现转场的动画现在很流行,效果大致如下:" 本文主讲SWIFT版,OC版在后面会留下Demo下载 在iOS中,在同 ...
- 什么是边界扫描(boundary scan)?
边界扫描(Boundary scan )是一项测试技术,是在传统的在线测试不在适应大规模,高集成电路测试的情况下而提出的,就是在IC设计的过程中在IC的内部逻辑和每个器件引脚间放置移位寄存器(shif ...
- nodejs 操作mysql
这篇文章主要介绍了nodejs中操作mysql数据库示例,本文演示了如何在NodeJS中创建创建mysql连接.mysql数据库.插入数据.查询数据等功能,需要的朋友可以参考下 引言: 继前面的No ...
- WPF之快速实现拖拽功能
场景:工具栏上有很多图标(一个图标代表一种控件),可以左键按下图标,然后拖拽到设计区域创建一个个的控件. 实现:1.给工具栏上的图标添加MouseLeftDown和MouseMove事件,前者事件是为 ...
- 模糊查询的like '%$name$%'的sql注入避免
Ibatis like 查询防止SQL注入的方法 Ibatis like 查询防止SQL注入的方法 mysql: select * from tbl_school where school_name ...
- 1、Hibernate之生成SessionFactory源码追踪
Hibernate的所有session都是由sessionFactory来生成的,那么,sessionFactory是怎么得来的呢?它与我们配置的xxx.cfg.xml文件以及xxx.hbm.xml文 ...
- 【原创】通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 ‘incorrect string value: '\xF0...
这篇blog重点在解决问题,如果你对字符编码并不是特别了解,建议先看看 < [原创]通俗易懂地解决中文乱码问题(1) --- 跨平台乱码 >. 当然,如果只是针对解决这个Mysql插入报错 ...
- vc 6.0 连接数据库
在mysql的文档(C:\Program Files\MySQL\MySQL Server 5.5\lib)里面找到libmysql.dll和libmysql.lib 两个文件,将他们移到 工程文件下 ...
- Android 的 ramdisk.img、system.img、userdata.img 作用说明,以及UBoot 系统启动过程
首先通過編譯,先將android內核編譯成功.正常情況下,在目錄out/target.product/generic/(但是有的就沒有generic文件,如freescale和iriver:但是lon ...
- Cocos2d-x 开发手记
1.所有的源文件统一新建到Classes里,否则无法找到源文件,这样也便于跨平台编译 2.绘图坐标系,与opengl采用相同坐标系,左下角为原点 纹理坐标系,以左上角为原点 3.最近有在学习C ...