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   2016.03.22 11:40

you are right!

lxk_1993
lxk_1993   Rxr 2016.03.22 14:04

基本上是对的 不错 有前途

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

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!