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设计模式学习记录-模板方法模式
前言 模板方法模式,定义一个操作中算法的骨架,而将一些步骤延迟到子类中.使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤. 模板方法模式 概念介绍 模板方法模式,其实是很好理解的,具体 ...
随机推荐
- scp 传文件
1. 从远程服务器上拷贝文件(指定远程服务器的用户名:IP:文件 本地文件名) scp root@121.43.16.131:/etc/supervisor/supervisord.conf ~ ...
- 对话框上右下角显示resize icon(可以拖动改变对话框的大小)(在WM_CREATE的时候,增加WS_THICKFRAME风格)
CStatusBar m_StatusBar; // 成员变量 // 全局变量 static UINT auIDStatusBar[] = { ID_SEPARATOR }; //在对话框类的WM_ ...
- 如何在Eclipse中添加Tomcat的jar包
原文:如何在Eclipse中添加Tomcat的jar包 右键项目工程,点击Java Build Path 点击Add Library,选择Server Runtime 选择Tomcat版本 此时就看到 ...
- Mysql日期和时间函数不求人
这里是一个使用日期函数的例子.下面的查询选择了所有记录,其date_col的值是在最后30天以内: mysql> SELECT something FROM table WHERE TO_DA ...
- JVM垃圾回收机制总结(6) :透视Java的GC特性
1. 使用 System.gc() 可以不管JVM使用的是哪一种垃圾回收的算法,都可以请求 Java的垃圾回收. 在命令行中有一个参数-verbosegc可以查看Java使用的堆内存的情况,它的格式: ...
- Data Flow ->> Import Column & Export Column
这两个transformation的作用是把DT_TEXT, DT_NTEXT, DT_IMAGE类型的数据在文件系统和数据库间导出或者导入.比如把某个数据库表的image类型的字段导出到文件系统成为 ...
- SSIS ->> Logging
SSIS提供了Event Handler之外的另一种方法捕捉Event和获取需要的信息,这种方法是Logging.SSIS的Logging针对不同的组件可以提供比Event Handler更多的Eve ...
- 《OD学hadoop》第三周0709
一.MapReduce编程模型1. 中心思想: 分而治之2. map(映射)3. 分布式计算模型,处理海量数据4. 一个简单的MR程序需要制定map().reduce().input.output5. ...
- JSON 之 SuperObject(10): Merge、Clone、ForcePath
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, For ...
- ArrayAdapter参数的不同运用
ArrayAdapter参数不同带来的效果不同 String[] array = {"a","b","c","d",&q ...