(八)模板方法

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

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 设计模式学习总结(下)的更多相关文章

  1. Java设计模式学习记录-状态模式

    前言 状态模式是一种行为模式,用于解决系统中复杂的对象状态转换以及各个状态下的封装等问题.状态模式是将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象的状态可以灵活多变.这样在客户端使 ...

  2. Java设计模式学习记录-观察者模式

    前言 观察者模式也是对象行为模式的一种,又叫做发表-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式. 咱们目前用的最多的就是各种MQ(Message Queue ...

  3. Java设计模式学习记录-备忘录模式

    前言 这次要介绍的是备忘录模式,也是行为模式的一种 .现在人们的智能手机上都会有备忘录这样一个功能,大家也都会用,就是为了记住某件事情,防止以后自己忘记了.那么备忘录模式又是什么样子的呢?是不是和手机 ...

  4. Java设计模式学习记录-迭代器模式

    前言 这次要介绍的是迭代器模式,也是一种行为模式.我现在觉得写博客有点应付了,前阵子一天一篇,感觉这样其实有点没理解透彻就写下来了,而且写完后自己也没有多看几遍,上次在面试的时候被问到java中的I/ ...

  5. Java设计模式学习记录-装饰模式

    前言 装饰模式也是一种结构型模式,主要是目的是相对于类与类之间的继承关系来说,使用装饰模式可以降低耦合度.JDK中有不少地方都使用到了装饰模式,例如Java的各种I/O流,javax.swing包中一 ...

  6. java设计模式学习笔记--接口隔离原则

    接口隔离原则简述 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应建立在最小的接口上 应用场景 如下UML图 类A通过接口Interface1依赖类B,类C通过接口Interface1依赖类 ...

  7. java设计模式学习笔记--单一职责原则

    单一职责原则注意事项和细节 1.降低类的复杂度,一个类只负责一项职责 2.提高可读性,可维护性 3.降低变更引起的风险 4.通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单 ...

  8. java设计模式学习笔记--浅谈设计模式

    设计模式的目的 编写软件的过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战.设计模式为了让程序具有更好的 1.代码重用性(即:相同功能的代码,不用多次编写) ...

  9. Java设计模式学习资源汇总

    本文记录了Java设计模式学习书籍.教程资源.此分享会持续更新: 1. 设计模式书籍 在豆瓣上搜索了一把,发现设计模式贯穿了人类生活的方方面面.还是回到Java与程序设计来吧. 打算先归类,再浏览,从 ...

  10. Java设计模式学习记录-模板方法模式

    前言 模板方法模式,定义一个操作中算法的骨架,而将一些步骤延迟到子类中.使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤. 模板方法模式 概念介绍 模板方法模式,其实是很好理解的,具体 ...

随机推荐

  1. 共有19款Java 文件上传组件开源软件

    http://www.oschina.net/project/tag/139/fileupload?lang=19&sort=view

  2. 解决 ko mapping 数组无法添加新对象的问题

    这两天页面模板化的进程有些放缓,使用 ko mapping 插件的情形多了起来.组员经常问到的问题即是往 ko mapping 数组添加新对象时,报找不到方法的错误:而使用 ko.observable ...

  3. HttpClient Post Form提交文件/二进制数据

    HttpClient httpClient = HttpClients.createDefault(); HttpPost httppost = new HttpPost(url); Multipar ...

  4. 【linux】/dev/null与/dev/zero详解【转】

    转自:http://www.cnblogs.com/xianghang123/archive/2012/03/23/2413381.html 使用/dev/null 把/dev/null 看作&quo ...

  5. php关于static关键字

    静态属性与方法可以在不实例化类的情况下调用,直接使用类名::方法名的方式进行调用.静态属性不允许对象使用->操作符调用.静态方法中,$this伪变量不允许使用.可以使用self,parent,s ...

  6. Oracle EBS 寄售业务总结

    总述: 须通过一揽子采购协议(BPA)明确采购方与供应商之间的寄售关系,及各种协议条款: 通过来源补充规则(Sourcing Rules)明确物料的供应商以及分配规则: 通过合格供应商列表(ASL)明 ...

  7. STL笔记(3) copy()之绝版应用

    STL笔记(3) copy()之绝版应用 我选用了一个稍稍复杂一点的例子,它的大致功能是:从标准输入设备(一般是键盘)读入一些整型数据,然后对它们进行排序,最终将结果输出到标准输出设备(一般是显示器屏 ...

  8. android 启动第三方程序的代码

      //启动媒体库 Intent i = new Intent(); ComponentName comp = new ComponentName("com.android.camera&q ...

  9. 编程时 对 用途这个字段定义时 不要用using 这个英文

    编程时  对 用途这个字段定义时  不要用using 这个英文

  10. core--主线程

    windows的线程是windows可以分配给cpu的最小单元,对window应用程序的管理,最小的管理单位就是线程.那什么是线程?线程其实什么都不是,只是一个概念,没有实体,又看不见.这个概念的定义 ...