- 浏览: 7205 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
13.访问者模式
访问者模式也称为Visitor模式,使用这种模式后可以在不修改已有程序结构的前提下,通过额外添加“访问者”来对已有代码的功能实现提升。表示一个作用于某对象结构中的各元素的操作。它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
构成访问者模式的角色如下:
1.访问者角色(Visitor):为该对象结构中的具体元素角色声明一个访问操作接口。该操作接口的名字和参数标识了发送访问请求给具体访问者的具体元素角色。这样访问者就可以通过该元素角色的特定接口直接访问它。
2.具体访问者角色(Concrete Visitor):实现每个由访问者角色(Visitor)声明操作。
3.元素角色(Element):定义一个Accept操作,它以一个访问者为参数。
4.具体元素角色(Concrete Element):实现由元素角色提供的Accept操作。
5.对象结构角色(Object Structure):这是使用访问者模式必备的角色。它要具备以下特征—能枚举它的元素;可以提供一个高层的接口以允许该访问者访问它的元素;可以是一个复合(组合模式)或是一个集合,如一个列表或一个无序集合。
适用访问者模式的情况
(1)一个对象结构包含很多类对象,它们有不同的接口,而我们想对这些对象实施一些依赖于其具体类的操作。
(2)需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而我们想避免让这些操作“污 染”这些对象的类。Visitor使得我们可以将相关的操作集中起来,定义在一个类中。(3)当对象结构被很多应用共享时,Visitor模式让每个应用仅包含需要用到的操作。
(4)定义对象结构的类很少改变,但经常需要在此结构上定义新的操作。改变对象结构类需要重定义对所有访问者的接口,这可能需要很大的代价。如果对象结构类经常改变,那么可能还是在这些类中定义这些操作较好。
14.策略模式
策略模式又被称为算法族模式,就是定义了不同的算法族,并且相互之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
策略模式属于对象行为型模式,主要针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。通常,策略模式适合于当一个应用程序需要实现一种特定的服务或者功能,而且该程序有多种实现方式时使用。
在策略模式中有如下几个对象:
1.环境对象:该类中实现了对象策略中定义的接口或者抽象类的引用。
2.抽象策略对象:它可由接口或抽象类来实现。
3.具体策略对象:它封装了实现不同功能的不同算法。
“刘备回荆州问题”刘备要到江东娶老婆,走之前诸葛亮给伴郎赵云三个锦囊妙计,说是按天机拆开能解决棘手问题。先说说这个场景的三要素:三个妙计,一个锦囊,一个赵云。妙计是亮哥给的,妙计放在锦囊里,俗称就是锦囊妙计。那赵云就是一个干活的人,从锦囊里取出妙计,执行,然后获胜。如果用Java 来表示这个过程,则具体实现流程如下所示。
访问者模式也称为Visitor模式,使用这种模式后可以在不修改已有程序结构的前提下,通过额外添加“访问者”来对已有代码的功能实现提升。表示一个作用于某对象结构中的各元素的操作。它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
构成访问者模式的角色如下:
1.访问者角色(Visitor):为该对象结构中的具体元素角色声明一个访问操作接口。该操作接口的名字和参数标识了发送访问请求给具体访问者的具体元素角色。这样访问者就可以通过该元素角色的特定接口直接访问它。
2.具体访问者角色(Concrete Visitor):实现每个由访问者角色(Visitor)声明操作。
3.元素角色(Element):定义一个Accept操作,它以一个访问者为参数。
4.具体元素角色(Concrete Element):实现由元素角色提供的Accept操作。
5.对象结构角色(Object Structure):这是使用访问者模式必备的角色。它要具备以下特征—能枚举它的元素;可以提供一个高层的接口以允许该访问者访问它的元素;可以是一个复合(组合模式)或是一个集合,如一个列表或一个无序集合。











适用访问者模式的情况
(1)一个对象结构包含很多类对象,它们有不同的接口,而我们想对这些对象实施一些依赖于其具体类的操作。
(2)需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而我们想避免让这些操作“污 染”这些对象的类。Visitor使得我们可以将相关的操作集中起来,定义在一个类中。(3)当对象结构被很多应用共享时,Visitor模式让每个应用仅包含需要用到的操作。
(4)定义对象结构的类很少改变,但经常需要在此结构上定义新的操作。改变对象结构类需要重定义对所有访问者的接口,这可能需要很大的代价。如果对象结构类经常改变,那么可能还是在这些类中定义这些操作较好。
14.策略模式
策略模式又被称为算法族模式,就是定义了不同的算法族,并且相互之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
策略模式属于对象行为型模式,主要针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。通常,策略模式适合于当一个应用程序需要实现一种特定的服务或者功能,而且该程序有多种实现方式时使用。

在策略模式中有如下几个对象:
1.环境对象:该类中实现了对象策略中定义的接口或者抽象类的引用。
2.抽象策略对象:它可由接口或抽象类来实现。
3.具体策略对象:它封装了实现不同功能的不同算法。
“刘备回荆州问题”刘备要到江东娶老婆,走之前诸葛亮给伴郎赵云三个锦囊妙计,说是按天机拆开能解决棘手问题。先说说这个场景的三要素:三个妙计,一个锦囊,一个赵云。妙计是亮哥给的,妙计放在锦囊里,俗称就是锦囊妙计。那赵云就是一个干活的人,从锦囊里取出妙计,执行,然后获胜。如果用Java 来表示这个过程,则具体实现流程如下所示。







发表评论
-
Netty学习
2018-01-16 13:22 011111 -
java性能优化
2017-08-07 22:08 01111111 -
设计模式(三)
2017-07-29 23:57 4428.命令模式 命令模式即C ... -
设计模式(二)
2017-07-23 17:28 3733.桥梁模式 桥梁模式: ... -
设计模式(一)
2017-07-18 22:25 339二十三种设计模式包括 ... -
java多线程模式(二)
2017-07-18 22:05 01.Thread Specific Storage (线 ... -
java多线程模式(一)
2017-07-18 22:00 3901.Immutable Object (不可变对象) 模式 ... -
java多线程(十)
2017-07-13 23:14 0多线程分析监控调优工具 -
java多线程(八)
2017-07-13 22:54 44814、对象锁 1. 对象锁 所有对象都自动含有单 ... -
java多线程(七)
2017-07-12 23:54 1621目前在Java中存在两种锁 ... -
java多线程(六)
2017-07-11 23:32 4619、悲观锁 悲 ... -
java多线程(五)
2017-07-09 20:25 5805、读写锁 相比Java中的 ... -
java源码学习(一)
2017-08-07 22:07 402AtomicBoolean源码分析 Java不能直接访问操作 ... -
java多线程(四)
2017-07-09 16:13 457锁 java 多线程的锁我是 ... -
java多线程(三)
2017-07-08 23:30 359线程状态转化图 这 ... -
java多线程(二)
2017-07-03 23:18 495上节说到final、volatile、synchronized ... -
java多线程(一)
2017-07-03 23:17 421很多人都对其中的一些 ...
相关推荐
Java 设计模式四大常用架构迭代模型并行排序算法 Java 设计模式是软件工程中的一种思想,旨在提高软件的重用性和可维护性。1995 年,著名的书籍《Design Pattern》出版,总结了 23 种经典的设计模式,成为软件设计...
设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决常见问题的最佳实践。设计模式并不是具体的代码或库,而是一种通用解决方案的描述,可以在多种编程语言中应用。这个压缩包文件“设计模式中文版.pdf”...
### 设计模式经典详解 #### 引言:设计模式的重要性 设计模式是在软件工程领域内广泛应用的一种实践方法,尤其在面向对象编程中占有极其重要的地位。面向对象设计本身就已经足够复杂,而要创建出既可复用又具备...
在IT行业中,设计模式是软件开发中的重要概念,它们代表了在特定场景下解决常见问题的最佳实践。本文将深入探讨“工厂方法模式”,并结合比萨店生产比萨的实例来解析这一模式的运用。首先,我们要理解工厂方法模式的...
GOF(Gang of Four)设计模式,由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位专家在他们的著作《设计模式:可复用面向对象软件的基础》中提出,被誉为设计模式的经典之作。本资源包含了GOF设计...
本实验“东北大学四种设计模式实验”旨在帮助学生深入理解和掌握四种经典的设计模式:单例模式、组合模式、Builder模式以及装饰器模式,并通过实际应用,将这些模式应用于构建一个赌场系统,从而提升代码的可读性、...
大话设计模式 完整设计模式介绍
软件设计模式大作业 本资源为一份完整的软件设计模式大作业,涵盖了六种设计模式的应用,分别是简单工厂模式、工厂方法模式、单例模式、门面模式、策略模式和观察者模式。该大作业的主要内容包括系统流程、系统类图...
"设计模式" 在软件开发中,设计模式...本书《您的设计模式》对设计模式进行了详细的讲解,涵盖了十四种常用的设计模式。这些设计模式可以帮助开发者编写更加灵活、可维护、可扩展的代码,以提高系统的性能和可维护性。
#### 四、设计模式的分类 ##### 4.1 J2EE设计模式 J2EE设计模式在过去几年中随着Java开发人员经验的增长而不断发展。这些模式是针对使用各种J2EE技术时可能出现的问题提出的,能够帮助开发人员构建出符合需求的...
这个项目涵盖了四种重要的设计模式:单例模式、代理模式、建造者模式和抽象工厂模式,为初学者提供了一个良好的实践平台。 1. **单例模式**: 单例模式是一种确保一个类只有一个实例并提供全局访问点的设计模式。...
设计模式在四则运算表达式中的应用 本文将探讨设计模式在四则运算表达式中的应用,设计一个完成数学运算的计算器,计算器要实现四则运算、三角运算、倒数、乘方/开方这些基本运算,并使用抽象语法树显示计算的过程...
组合模式、观察者模式、抽象工厂、工厂方法设计模式简介
《C#设计模式PDF 电子书》是一本专注于C#编程语言中设计模式的应用和解析的书籍,2005年04版意味着它在设计模式领域的应用尚处于早期阶段,但仍然具有很高的学习价值。设计模式是软件工程中经过实践验证的、解决常见...
本书共有14章,每章都介绍了几个设计模式,完整地含盖了四人组版本全部23个设计模式.前言先介绍这本书的用法;第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、...
设计模式的学习过程通常分为四个阶段:学习、表达、教授、记录。每个阶段都需要不同的技能和深度的理解。 #### 0.2 设计模式解析后记 在完成所有设计模式的学习和解析之后,开发者会发现自己已经进入了一个新的...
### Java设计模式详解 #### 一、背景与概念 在软件工程领域,设计模式是一种用于解决常见问题的可重用解决方案。《Java设计模式PDF》是一本由James W. Cooper编写的经典书籍,该书详细介绍了Java编程语言中的设计...
### C++设计模式精解 #### 一、引言 设计模式是软件工程领域中一个非常重要的话题,它为解决常见的软件设计问题提供了标准化的方法。本书《C++设计模式》聚焦于GoF(Gang of Four)所提出的23种设计模式,并通过...