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设计模式学习记录-模板方法模式
前言 模板方法模式,定义一个操作中算法的骨架,而将一些步骤延迟到子类中.使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤. 模板方法模式 概念介绍 模板方法模式,其实是很好理解的,具体 ...
随机推荐
- 读取redis中的数据时出现:MISCONF Redis is configured to save RDB snapshots
读取redis中的数据时出现:MISCONF Redis is configured to save RDB snapshots 以下为异常详细信息: Exception in thread &q ...
- 294. Flip Game II
题目: You are playing the following Flip Game with your friend: Given a string that contains only thes ...
- Oracle ->> Oracle下生成序列的方法
用hierachical query,即connect by配合dual表生成序列,mod这个是取余函数,生成group factor.最后面的connect by rownum <= 100可 ...
- 【java】String类和StringBuffer类常用操作
String类是字符串常量,是不可更改的常量.而StringBuffer是字符串变量,它的对象是可以扩充和修改的.StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于Stri ...
- 20_采用ContentProvider对外共享数据
<AndroidManifest.xml> <application <provider android:name=".PersonProvider&q ...
- android 从服务器上获取APK下载安装
简单的为新手做个分享. 网上有些资料,不过都是很零散,或是很乱的,有的人说看不懂. 一直有新手说 做到服务器更新APK时没有思路,这里做个简单的分享,希望有不同思路的可以讨论. 下面做个很简单的读 ...
- AbsListView.OnScrollListener 使用注意事项
这个类没什么特别的,但是使用的时候我确出错了 abstract void onScroll(AbsListView view, int firstVisibleItem, int visibleIte ...
- GitHub的使用 —— 如何删除Repository
如果要在GitHub上删除一个已经存在的Repository,该怎么办呢 ? 1.首先,点击这个资源(Repository),进入.会看到如下页面: 2.点击 Admin .在 Admin 页面的最下 ...
- 在windows系统上安装VMware Workstation虚拟机,然后在虚拟机VMware Workstation上安装linux系统,在linux系统安装xshell的服务端,在windows系统上安装xshell。用windows系统上的xshell连接到linux
第一步:安装xshell: 去百度 xshell ,然后安装一下就可以了.就是普通的软件安装,在这里不做过多的接收. 第二步:安装虚拟机VMware Workstation 百度安装,不做过介绍 ...
- 使用multimap创建重复键关联容器
在“使用 <map> 库创建关联容器”一文中,我们讨论了标准库中的 map 关联容器.但那只是 map 容器的一部分.标准库还定义了一个 multimap 容器,它与 map 类似,所不同 ...