菜单是个接口,实现接口的是厨师,厨师有中餐厨师和西餐厨师(顾客有菜单,菜单是属性)
任何一个接口都有调用者和实现者
接口可以将调用者和实现者解耦合
调用者面向接口调用
实现者面向接口编写实现
这个例子把厨师和顾客解耦合了。
项目组可以先定义好接口,然后一些人写customer,一些人写AmericaCooker,一些人写ChianCooker,一些人写Test,这样编码效率就大大提高。其中最难的其实是接口的编写。
顾客类
public class Customer{
private FoodMenu foodMenu;
public Customer(){
}
public Customer(FoodMenu foodMenu){
this.foodMenu=foodMenu;
}
public void setFoodMenu(FoodMenu foodMenu){
this.foodMenu=foodMenu;
}
public FoodMenu getFoodMenu(){
return foodMenu;
}
public void order(){
foodMenu.shiZiChaoJiDan();
foodMenu.yuXiangRouSi();
}
}
接口菜单类
public interface FoodMenu{
void shiZiChaoJiDan();
void yuXiangRouSi();
}
中餐厨师子类
public class ChinaCooker implements FoodMenu{
public void shiZiChaoJiDan(){
System.out.println("中餐西红柿炒鸡蛋");
}
public void yuXiangRouSi(){
System.out.println("中餐鱼香肉丝");
}
}
西餐厨师子类
public class AmericaCooker implements FoodMenu{
public void shiZiChaoJiDan(){
System.out.println("西餐西红柿炒鸡蛋");
}
public yuXiangRouSi(){
System.out.println("西餐鱼香肉丝");
}
}
主类
public class interfaceTest{
public static void main(String[] args){
//创建中餐厨师对象
FoodMenu cooker1=new ChinaCooker();
//创建顾客对象,顾客点的是中餐
Customer customer=new Customer(cooker1);
//顾客点菜
customer.order();
}
}
如果想要吃西餐,只要改FoodMenu cooker1=new ChinaCooker();这句就行。