2 u010721688 u010721688 于 2016.03.22 11:20 提问

请问各位,我这样理解访问者模式正确吗,一个简单的例子

package test;
public class Client{
//数据对象二 顾客
public static void main(String[] args) {
//当顾客进饭店吃饭,他不会直接跟厨师打交道,
//1.饭店主要是炒菜,这时,厨师会炒很多菜 但是不知道炒哪个菜, 厨房与顾客 不具备炒菜的功能,
//所以炒菜可以是厨师的功能,但是需要一个中间人来告诉厨师炒什么菜,那么我们就定义一个菜单,相当于访问者,访问厨师炒菜功能
//菜单列出了厨师会炒的菜,顾客与厨师接触不到 厨师不知道炒什么,那么就由菜单告诉厨师,
//2.这里分析出来 厨师与顾客根本没有任何关系,两者互不影响,
//3.整套流程就是 顾客告诉菜单需要吃什么菜 菜单告诉厨师炒什么菜,
//4.这个菜单本身是不存在的,为了能让两个不相关的人关联到一起,但是又不能相互影响 所以产生菜单(访问者 访问的是厨师)
CD cd= new CDclass();
System. out.println("1.告诉菜单我要吃豆鼓炒干辣椒" );
cd.DG();
}
}
//数据对象一 厨房
abstract class CF{
//这里简单定义厨房只有厨师,厨师只能炒菜,可以扩展厨房有配菜烧火之类的功能等
public abstract void CS(String cai);//厨师
public abstract void CC(CF cf,String cai); //拿着穿菜单通知厨师炒菜
}
class CFclass extends CF{
public void CS(String cai) {
System. out.println("3.开始炒菜:" +cai);
}
public void CC(CF cf,String cai) {
cf.CS(cai); //传菜单通知厨师炒菜
}

}
//类似于访问者 -- 菜单 中间调节 相当于把两个搭不上关系的人 关联起来
abstract class CD{
public abstract void FZ();//腐竹炒干辣椒
public abstract void DG();//豆鼓炒干辣椒
}
class CDclass extends CD{
public void DG() {
System. out.println("2.传菜单" );
CF cf= new CFclass();
cf.CC( new CFclass(),"豆鼓炒干辣椒" );
}
public void FZ() {
System. out.println("2.传菜单" );
CF cf= new CFclass();
cf.CC( new CFclass(),"腐竹炒干辣椒" );
}
}

3个回答

enpterexpress
enpterexpress   Rxr 2016.03.22 11:40

you are right!

lxk_1993
lxk_1993   Rxr 2016.03.22 14:04

基本上是对的 不错 有前途

u010721688
u010721688 thank you
2 年多之前 回复
u010721688
u010721688 thank you
2 年多之前 回复
u010721688
u010721688   2017.09.27 10:53

抱歉一年前问的比较低级的问题,其实设计模式都是一种概念,没有完完整整的设计模式,也没有万能的设计模式,我们在设计当中通常要考虑灵活性,扩展性,易维护性,
说这么多其实就是java一直提出的概念 高聚内 低耦合 , 设计模式其实就相当于整理关系,一堆代码 可以不使用任何设计模式都能正确运行,但是写代码的时候遵守了一些设计模式的习惯,代码会好看 好维护很多,但是遵守设计任何设计模式之前,先遵守 高聚内 低耦合,单一职责 ,否则一切的设计模式都是笑话。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
我所理解的设计模式(C++实现)——访问者模式(Visitor Pattern)
我们去银行柜台办业务,一般情况下会开几个个人业务柜台的,你去其中任何一个柜台办理都是可以的。我们的访问者模式可以很好付诸在这个场景中:对于银行柜台来说,他们是不用变化的,就是说今天和明天提供个人业务的柜台是不需要有变化的。而我们作为访问者,今天来银行可能是取消费流水,明天来银行可能是去办理手机银行业务,这些是我们访问者的操作,一直是在变化的。
访问者模式的意图
访问者模式的访问者,是做专项检查的。
什么是kafka--最容易理解的例子
什么是kafka
设计模式读书笔记-----访问者模式
生老病死乃常态,是我们每个人都逃脱不了的,所以进医院就是一件再平常不过的事情了。在医院看病,你首先的挂号,然后找到主治医生,医生呢?先给你稍微检查下,然后就是各种处方单(什么验血、CD、B超等等,太坑了。。。。),再然后就给你一个处方单要你去拿药。拿药我们可以分为两步走,第一步,我们要去交钱,划价人员会根据你的处方单上面的药进行划价,交钱。第二步,去药房拿药,药房工作者同样根据你的处方单给你相对应
23种设计模式(23)_行为型_访问者模式(Vistor Pattern)
定义:封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。类型:行为类模式。符合单一职责原则:凡是适用访问者模式的场景中,元素类中需要封装在访问者中的操作必定是与元素类本身关系不大且是易变的操作,使用访问者模式一方面符合单一职责原则,另一方面,因为被封装的操作通常来说都是易变的,所以当发生变化时,就可以在不改变元素类本身的前提下,实现对变化部分的扩展。 扩展性良好:元素类可以通过接受不同的访问者来实现对不同操作的扩展。
JAVA设计模式之 访问者模式【Visitor Pattern】
一、概述     访问者模式是一种较为复杂的行为型设计模式,它包含访问者和被访问元素两个主要组成部分,这些被访问的元素通常具有不同的类型,且不同的访问者可以对它们进行不同的访问操作。在使用访问者模式时,被访问元素通常不是单独存在的,它们存储在一个集合中,这个集合被称为“对象结构”,访问者通过遍历对象结构实现对其中存储的元素的逐个操作。访问者模式是一种对象行为型模式。 二、适用场景
特殊回文数字:求出5位数和6位数中各位上的数字之和为n的回文数。
问题描述   123321是一个非常特殊的数,它从左边读和从右边读是一样的。   输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。 输入格式   输入一行,包含一个正整数n。 输出格式   按从小到大的顺序输出满足条件的整数,每个整数占一行。 样例输入 52 样例输出 899998 989989 998899 数据规模和约定   1
深入理解javascript之设计模式
设计模式 设计模式是命名、抽象和识别对可重用的面向对象设计有用的的通用设计结构。设计模式确定类和他们的实体、他们的角色和协作、还有他们的责任分配。 每一个设计模式都聚焦于一个面向对象的设计难题或问题。它描述了在其它设计的约束下它能否使用,使用它后的后果和得失。因为我们必须最终实现我们的设计模式,所以每个设计模式都提供了例子,代码来对实现进行阐释. 虽然设计模式被描述为面向对象的设计,它们基于
简单理解“区块链”
今年过年回家,小我一岁的堂弟问我你们做软件的知不知道比特币?“区块链”啊?好尴尬,之前实习的时候有听同事好像在玩比特币但是一点都不了解。所以就读了这篇文章写了这篇读书笔记。这篇文章避开了一些底层和算法细节,采用比较主观的方式来展示对区块链的感性认识,这只是在别人问起的时候可以稍稍表现下的。之后还得深入对它进行学习跟了解。(一)去中心化:查了些资料反复提到区块链是一个去中心化的系统,那么我们先简单了...
简单的dp hdu 数塔(水题)
数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 21314    Accepted Submission(s): 12808 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,