/* * 菜单接口,抽象的 * */ 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 void yuXiangRouSi() { System.out.println("西餐师傅做的鱼香肉丝,美国口味"); } }
顾客类(点菜):
/* * 顾客类 * */ public class Customer { // 顾客手里有一个菜单 // Customer has a FoodMenu!(这句话什么意思?顾客手里有一个菜单) // 记住:以后凡是能够使用 has a 来描述的,统一以属性的方式存在。 // 实例变量,属性 // 面向抽象编程,面向接口编程,降低耦合度,提高扩展力。 private FoodMenu foodMenu;// 以后写代码要养成封装的好习惯 // 如果以下这样写,就表示写死了(焊接了,没有可插拔了) /*ChinaCooker a; AmericaCooker b;*/ // 构造方法 public Customer() { } public Customer(FoodMenu foodMenu) { this.foodMenu = foodMenu; } // setter and getter public FoodMenu getFoodMenu() { return foodMenu; } public void setFoodMenu(FoodMenu foodMenu) { this.foodMenu = foodMenu; } // 点菜方法 public void order(){ // 先拿到菜单才能点菜 // 调用get方法拿到菜单 // FoodMenu foodMenu = this.getFoodMenu(); foodMenu.shiZiChaoJiDan(); foodMenu.yuXiangRouSi(); } }
测试类:
public class Test { public static void main(String[] args) { // 创建厨师对象 中国厨师对象 FoodMenu foodMenu = new ChinaCooker(); // 创建顾客对象 Customer customer = new Customer(foodMenu); // 顾客点菜 customer.order(); // 西餐厨师做菜 FoodMenu foodMenu1 = new AmericaCooker(); Customer customer1 = new Customer(foodMenu1); customer1.order(); } }
原文:https://www.cnblogs.com/xlwu/p/13121428.html