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(),"腐竹炒干辣椒" );
}
}