- 浏览: 5447 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
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):这是使用访问者模式必备的角色。它要具备以下特征—能枚举它的元素;可以提供一个高层的接口以允许该访问者访问它的元素;可以是一个复合(组合模式)或是一个集合,如一个列表或一个无序集合。
![](http://dl2.iteye.com/upload/attachment/0126/3059/f62d1898-2889-3bd0-99f1-c29fc7de892d.png)
![](http://dl2.iteye.com/upload/attachment/0126/3265/1c8f570d-abf1-37d3-bb60-0af1396cd841.png)
![](http://dl2.iteye.com/upload/attachment/0126/3267/61b58139-2a4f-37bc-a2ae-5dc860d4f621.png)
![](http://dl2.iteye.com/upload/attachment/0126/3269/ee656740-384c-3211-acd5-0390702c8b15.png)
![](http://dl2.iteye.com/upload/attachment/0126/3271/3bd1ed9d-0182-303e-8212-3f1ece0d1358.png)
![](http://dl2.iteye.com/upload/attachment/0126/3273/9816f275-6743-33e9-abf6-4073c24459c3.png)
![](http://dl2.iteye.com/upload/attachment/0126/3275/418c9288-2c36-3d50-a813-8ee2050039f8.png)
![](http://dl2.iteye.com/upload/attachment/0126/3277/e988d3dc-1213-34a6-9681-8c018f3cae39.png)
![](http://dl2.iteye.com/upload/attachment/0126/3279/6e5f89bf-132b-3d41-a2e9-ded687f10568.png)
![](http://dl2.iteye.com/upload/attachment/0126/3281/ba3e90a3-aab1-36fb-969f-2261f80ecd5c.png)
![](http://dl2.iteye.com/upload/attachment/0126/3283/7ea40883-da26-3234-ab0d-a8e245c17468.png)
适用访问者模式的情况
(1)一个对象结构包含很多类对象,它们有不同的接口,而我们想对这些对象实施一些依赖于其具体类的操作。
(2)需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而我们想避免让这些操作“污 染”这些对象的类。Visitor使得我们可以将相关的操作集中起来,定义在一个类中。(3)当对象结构被很多应用共享时,Visitor模式让每个应用仅包含需要用到的操作。
(4)定义对象结构的类很少改变,但经常需要在此结构上定义新的操作。改变对象结构类需要重定义对所有访问者的接口,这可能需要很大的代价。如果对象结构类经常改变,那么可能还是在这些类中定义这些操作较好。
14.策略模式
策略模式又被称为算法族模式,就是定义了不同的算法族,并且相互之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
策略模式属于对象行为型模式,主要针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。通常,策略模式适合于当一个应用程序需要实现一种特定的服务或者功能,而且该程序有多种实现方式时使用。
![](http://dl2.iteye.com/upload/attachment/0126/3285/5c1be7a5-c1d6-3655-ae88-b5adc2767c05.png)
在策略模式中有如下几个对象:
1.环境对象:该类中实现了对象策略中定义的接口或者抽象类的引用。
2.抽象策略对象:它可由接口或抽象类来实现。
3.具体策略对象:它封装了实现不同功能的不同算法。
“刘备回荆州问题”刘备要到江东娶老婆,走之前诸葛亮给伴郎赵云三个锦囊妙计,说是按天机拆开能解决棘手问题。先说说这个场景的三要素:三个妙计,一个锦囊,一个赵云。妙计是亮哥给的,妙计放在锦囊里,俗称就是锦囊妙计。那赵云就是一个干活的人,从锦囊里取出妙计,执行,然后获胜。如果用Java 来表示这个过程,则具体实现流程如下所示。
![](http://dl2.iteye.com/upload/attachment/0126/3289/9363cda3-fb41-30fb-8175-cc0744c83cb6.png)
![](http://dl2.iteye.com/upload/attachment/0126/3291/7f5968de-55d0-3263-a576-32ba33fc214b.png)
![](http://dl2.iteye.com/upload/attachment/0126/3293/5506eabe-8c15-371b-b0df-d20ab031ecbf.png)
![](http://dl2.iteye.com/upload/attachment/0126/3297/4abcc6e8-4b0e-3ff7-9605-f4a9e03919ea.png)
![](http://dl2.iteye.com/upload/attachment/0126/3299/15de2e25-b859-3760-94ee-76a36cf66ec5.png)
![](http://dl2.iteye.com/upload/attachment/0126/3301/e677da32-e112-3ef1-a6f8-5e8f2893fc7d.png)
![](http://dl2.iteye.com/upload/attachment/0126/3303/5f083f26-306b-3a28-9ba0-ed7f49eb2612.png)
发表评论
-
Netty学习
2018-01-16 13:22 011111 -
java性能优化
2017-08-07 22:08 01111111 -
设计模式(三)
2017-07-29 23:57 3668.命令模式 命令模式即C ... -
设计模式(二)
2017-07-23 17:28 3373.桥梁模式 桥梁模式: ... -
设计模式(一)
2017-07-18 22:25 314二十三种设计模式包括 ... -
java多线程模式(二)
2017-07-18 22:05 01.Thread Specific Storage (线 ... -
java多线程模式(一)
2017-07-18 22:00 3561.Immutable Object (不可变对象) 模式 ... -
java多线程(十)
2017-07-13 23:14 0多线程分析监控调优工具 -
java多线程(八)
2017-07-13 22:54 42114、对象锁 1. 对象锁 所有对象都自动含有单 ... -
java多线程(七)
2017-07-12 23:54 429目前在Java中存在两种锁 ... -
java多线程(六)
2017-07-11 23:32 3829、悲观锁 悲 ... -
java多线程(五)
2017-07-09 20:25 4905、读写锁 相比Java中的 ... -
java源码学习(一)
2017-08-07 22:07 356AtomicBoolean源码分析 Java不能直接访问操作 ... -
java多线程(四)
2017-07-09 16:13 421锁 java 多线程的锁我是 ... -
java多线程(三)
2017-07-08 23:30 330线程状态转化图 这 ... -
java多线程(二)
2017-07-03 23:18 470上节说到final、volatile、synchronized ... -
java多线程(一)
2017-07-03 23:17 389很多人都对其中的一些 ...
相关推荐
Java 设计模式四大常用架构迭代模型并行排序算法 Java 设计模式是软件工程中的一种思想,旨在提高软件的重用性和可维护性。1995 年,著名的书籍《Design Pattern》出版,总结了 23 种经典的设计模式,成为软件设计...
Design Patterns: Elements of Reusable Object-Oriented Software》(即后述《设计模式》一书),由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著(Addison-Wesley,1995)。这几位作者常被...
设计模式中文版本设计模式中文版本设计模式中文版本设计模式中文版本设计模式中文版本设计模式中文版本设计模式中文版本设计模式中文版本设计模式中文版本
设计模式经典高清设计模式经典高清设计模式经典高清设计模式经典高清
NULL 博文链接:https://quicker.iteye.com/blog/607944
设计模式在四则运算表达式中的应用 本文将探讨设计模式在四则运算表达式中的应用,设计一个完成数学运算的计算器,计算器要实现四则运算、三角运算、倒数、乘方/开方这些基本运算,并使用抽象语法树显示计算的过程...
组合模式、观察者模式、抽象工厂、工厂方法设计模式简介
GOF设计模式中英文+设计模式精解中英文,一共四个文档,高清版
用myeclipse开发的java设计模式课程设计,课题内容为西瓜工厂,包含四个设计模式,单例模式、代理模式、建造者模式和抽象工厂模式,有较好的图形界面,文档内附有完整代码,适用于新手学习。
《HeadFirst设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、...
完整的C#设计模式PDF版 C#设计模式(1) 4 一、 C# 面向对象程序设计复习 5 二、 设计模式举例 5 三、 先有鸡还是先有蛋? 7 四、 大瓶子套小瓶子还是小瓶子套大瓶子? 8 五、 .net本质 9 C#设计模式(2) 11 一、 ...
《Head First设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、...
简约至上:交互式设计四策略.pdf 界面设计模式 Designing Interfaces 2nd Edition.pdf 瞬间之美+Web界面设计如何让用户心动.pdf
NULL 博文链接:https://quicker.iteye.com/blog/608844
如果说“四人帮”的《设计模式》是设计模式...第四部分探讨了设计模式的混编,讲解了如何在实际开发中将各种设计模式混合起来使用,以发挥设计模式的最大效用。最后,本书还附有一份设计模式彩图,可以裁剪,便于参考。
四、单例设计模式 单例设计模式是指使用单例对象来提供全局访问点的设计模式。该模式有八种实现方式,包括饿汉式、懒汉式、双重检查、静态内部类、枚举等。单例设计模式的优点是提供了全局访问点,缺点是可能会导致...
全书共分四个部分:第一部分介绍C++、UML、Qt、模型-视图、SQL、XML、设计模式等基础知识,目的是为零基础的C++初学者铺垫一条学习面向对象编程的快捷之路;第二部分讲解内存访问、继承等重要的C++特性,是前一部分...
实现单例模式,组合模式,Builder模式,装饰器模式,并使用设计模式实现赌场
《Head First设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、...
GOF是设计模式的经典名著Design Patterns: Elements of Reusable Object-Oriented Software(中译本名为《设计模式——可复用面向对象软件的基础》)的四位作者,他们分为是:Elich Gamma、Richard Helm、Ralph ...