
工厂模式 Java实现
其余战斗机类(如J11.java等)结构类似,主要区别在于
发布日期:2021-05-27 02:41:41
浏览次数:22
分类:精选文章
本文共 1799 字,大约阅读时间需要 5 分钟。
一、产生背景
在软件工程中,过度使用new
关键字创建对象会导致代码难以维护和扩展。尤其是在大型项目中,修改时可能会“牵一发而动全身”,这与面向对象的基本原则不符。通过引入工程模式,将代码细节封装起来,对外仅暴露关键部分,可以实现面向对象的需求。工厂模式通过将重复部分封装为接口,解决了多个对象创建的统一管理问题。
二、工程简览
本工程包括以下部分:
- FlightFactory.java:工程模式的核心,用于获取战斗机对象的关键获取方式。
- Flight.java:战斗机接口,定义了所有战斗机必须实现的抽象方法
fire()
。 - J10.java, J11.java等:具体实现类,每个类都实现了
Flight
接口,并重写了fire()
方法,实现了独特的开火行为。 - FactoryProduce.java:测试生产类,负责模拟战斗机的实例化与使用。
三、实现
Flight.java
public interface Flight { public void fire();}
FlightFactory.java
public class FlightFactory { public Flight getFlight(String type) { switch (type) { case "J20": return new J20(); case "J11": return new J11(); case "J10": return new J10(); case "F16": return new F16(); case "F35": return new F35(); case "F22": return new F22(); default: return null; } }}
J10.java
public class J10 implements Flight { @Override public void fire() { System.out.println("J10 开火了..."); }}
其余战斗机类(如J11.java等)结构类似,主要区别在于fire()
方法内的打印内容。
FactoryProduce.java
public class FactoryProduce { public static void main(String[] args) { FlightFactory factory = new FlightFactory(); Flight j20 = factory.getFlight("J20"); j20.fire(); Flight j11 = factory.getFlight("J11"); j11.fire(); Flight j10 = factory.getFlight("J10"); j10.fire(); Flight f22 = factory.getFlight("F22"); f22.fire(); Flight f35 = factory.getFlight("F35"); f35.fire(); Flight f16 = factory.getFlight("F16"); f16.fire(); }}
操作结果
运行FactoryProduce.java
后,输出如下:
J20 开火了... J11 开火了... J10 开火了... F22 开火了... F35 开火了... F16 开火了...
这种设计模式通过将对象创建逻辑封装起来,简化了代码结构,提高了可维护性。每个具体实现类只需要实现接口中的抽象方法,而不用关心对象的创建细节。通过使用工厂模式,可以统一管理多种对象的创建过程,即使在未来扩展新的战斗机类型时,也只需要添加相应的实现类和对应的工厂方法判断即可。
发表评论
最新留言
不错!
[***.144.177.141]2025年04月20日 20时31分03秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Java动态代理3——阅读
2023-01-28
Java动态代理代码编写
2023-01-28
Java动态代理的两种实现方法
2023-01-28
Java动态代理的实现方式
2023-01-28
JAVA动态代理简单总结
2023-01-28
java勤工助学管理系统
2023-01-28
Java包装类、拆箱和装箱详解
2023-01-28
Java匹配文件流特定数据块方法
2023-01-28
java单例模式
2023-01-28
java博客后台管理系统(源码+开题报告)
2023-01-28
Java即时编译器原理解析及实践详解!你的Java基本功真的扎实吗?
2023-01-28
Java原型模式(Prototype模式)
2023-01-28
Java参数传递到底是按 值传递 还是 引用传递 ?
2023-01-28
JAVA反射
2023-01-28
Java反射
2023-01-28
java反射介绍
2023-01-28
Java反射代码编写
2023-01-28
JAVA反射机制
2023-01-28
JAVA反射机制
2023-01-28
java反射机制之Method invoke执行调用方法例子
2023-01-28