package Demo_1_24_Interface; // 食物的标准接口 public interface IFood { public boolean eat(); }
package Demo_1_24_Interface; //面包类 public class Bread implements IFood{ @Override public boolean eat() { System.out.println("面包好吃!"); return true; } }
package Demo_1_24_Interface; // 牛奶类 public class Milk implements IFood{ @Override public boolean eat() { System.out.println("喝牛奶!"); return true; } }
package Demo_1_24_Interface; // 中间转换类 public class Factory { public static IFood getInstance(String className) { if ("Bread".equals(className)) { return new Bread(); // 等同于 IFood food = new Bread();
}else if ("Milk".equals(className)) {
return new Milk(); // 等同于 IFood food = new Milk();
}else {
return null; }
}
}
package Demo_1_24_Interface; public class IFoodTest { public static void main(String[] args) { /* IFood food1 = new Bread(); food1.eat(); IFood food2 = new Milk(); food2.eat(); */ // 当对象food不需要吃面包,而需要喝牛奶时, // 就需要将new Bread();改为new Milk(); // 这种情况就是造成了耦合,而造成耦合的原因就是:new // 为了避免这种问题,采用工厂模式设计 IFood food = Factory.getInstance("Milk"); food.eat(); } }
工厂类就是一个选择类,通过筛选类名进行不同子类的创建,创建的对象都是通过向上转型的父类类型的对象。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)