菜单接口:FoodMenu.java
/*
接口:菜单,抽象的
*/
public interface FoodMenu{
// 西红柿炒蛋
void shiZiChaoJiDan();
// 鱼香肉丝
void yuXiangRouSi();
}
实现者(美国橱子): AmericaCook.java
//西餐厨师
// 实现菜单上的菜
// 厨师是接口的实现者。
public class AmericaCook implements FoodMenu{
// 西红柿炒蛋
public void shiZiChaoJiDan(){
System.out.println("美国人做的西红柿炒鸡蛋!");
}
// 鱼香肉丝
public void yuXiangRouSi(){
System.out.println("美国人做的鱼香肉丝!");
}
}
实现者(中国厨师): ChinaCook.java
//中餐厨师
// 实现菜单上的菜
// 厨师是接口的实现者。
public class ChinaCook implements FoodMenu{
// 西红柿炒蛋
public void shiZiChaoJiDan(){
System.out.println("西红柿炒鸡蛋!河南口味!");
}
// 鱼香肉丝
public void yuXiangRouSi(){
System.out.println("鱼香肉丝!湖南口味");
}
}
调用者(顾客): Customer.java
// 顾客
public class Customer{
// 顾客手里有一个菜单
// Customer has a FoodMenu!(这句话什么意思:顾客有一个菜单)
// 记住:以后凡是能够使用 has a 来描述的,统一以属性的方式存在。
// 实例变量,属性
// 面向抽象编程,面向接口编程。降低程序的耦合度,提高程序的扩展力。
private FoodMenu foodmenu;
// 如果以下这样写,就表示写死了(焊接了。没有可插拔了。)
// 中餐厨师
//ChinaCooker cc;
// 西餐厨师
//AmericCooker ac
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(){
// 先拿到菜单才能点菜
// 调用get方法拿菜单。
//FoodMenu fm = this.getFoodMenu();
// 也可以不调用get方法,因为在本类中私有的属性是可以访问
foodmenu.shiZiChaoJiDan();
foodmenu.yuXiangRouSi();
}
}
/*
Cat is a Animal,但凡满足is a的表示都可以设置为继承。
Customer has a FoodMenu,但凡是满足has a的表示都以属性的形式存在。
*/
测试类: Test.java
public class Test{
public static void main(String[] args){
//创建厨师对象
//FoodMenu f = new AmericaCook();
FoodMenu f = new ChinaCook();
//创建顾客对象
Customer c = new Customer(f);
//顾客点餐
c.order();
}
}
运行结果(Dos窗口模式):
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/94317.html