Java 简单工厂模式:打造可扩展的几何图形绘图工具类
```java // 定义几何形状接口 interface Shape { void draw(); void erase(); } // 实现圆形类 class Circle implements Shape { @Override public void draw() { System.out.println("绘制圆形"); } @Override public void erase() { System.out.println("擦除圆形"); } } // 实现矩形类 class Rectangle implements Shape { @Override public void draw() { System.out.println("绘制矩形"); } @Override public void erase() { System.out.println("擦除矩形"); } } // 实现三角形类 class Triangle implements Shape { @Override public void draw() { System.out.println("绘制三角形"); } @Override public void erase() { System.out.println("擦除三角形"); } } // 创建简单工厂类 class ShapeFactory { // 根据传入的类型返回相应的对象 public static Shape getShape(String type) { if (type == null || type.isEmpty()) { return null; } switch (type.toLowerCase()) { case "circle": return new Circle(); case "rectangle": return new Rectangle(); case "triangle": return new Triangle(); default: System.out.println("图形不支持"); return null; } } } // 测试类 public class Main { public static void main(String[] args) { Shape circle = ShapeFactory.getShape("circle"); if (circle != null) { circle.draw(); circle.erase(); } Shape rectangle = ShapeFactory.getShape("rectangle"); if (rectangle != null) { rectangle.draw(); rectangle.erase(); } Shape triangle = ShapeFactory.getShape("triangle"); if (triangle != null) { triangle.draw(); triangle.erase(); } Shape unsupported = ShapeFactory.getShape("pentagon"); if (unsupported == null) { System.out.println("尝试绘制不支持的图形"); } } } ``` ### 需要注意的逻辑点: 1. **参数校验**:在 `getShape` 方法中,确保传入的字符串非空且不为空白字符,避免因参数错误导致的异常。 2. **默认处理**:当传入的形状类型不匹配时,输出“图形不支持”并返回 `null`,确保程序不会因未知类型而崩溃。 3. **扩展性**:如果未来需要增加新的几何形状,只需在 `ShapeFactory` 中添加新的 `case` 分支,并实现相应的新类即可,保持代码的可维护性和扩展性。 ######[AI写代码神器 | 570点数解答 | 2024-11-30 14:40:37]
- Java 实现复制粘贴功能:打造简易文本复制粘贴程序(GPT | 1497点数解答 | 2024-08-25 09:40:33)409
- 解决数据库“dm.jdbc.driver.dmexception: 数据溢出”问题的全步骤指南(阿里通义 | 598点数解答 | 2024-10-15 15:48:38)310
- 达梦数据库数据溢出问题排查及多维度解决方法(阿里通义 | 403点数解答 | 2024-10-15 15:48:41)1149
- Qt 绘图全解析:从原理到示例及关键逻辑 (字节豆包 | 265点数解答 | 2025-03-12 10:55:54)179
- 解密iOS开发:Category、Extension与继承的区别大揭秘(阿里通义 | 292点数解答 | 2023-11-08 00:38:19)227
- iOS开发大揭秘:Category、Extension与继承的区别详解 (百度文心 | 316点数解答 | 2023-11-09 17:40:23)217
- Python 实现 DES 加密算法编程实验:从原理到单步调试全解析(字节豆包 | 4096点数解答 | 2025-11-09 22:06:30)73
- "Java Code: Uncovering Stock Statistics through CSV File Reading"(字节豆包 | 66点数解答 | 2024-11-13 15:31:04)323
- Android开发必备:Android Lint工具全面解析,助你提升应用质量!(百度文心 | 259点数解答 | 2023-11-09 17:33:53)237
- 工程师必备!15种常用工具大揭秘(百度文心 | 417点数解答 | 2023-11-09 18:25:39)272
- 工程师必备!常用浏览器兼容性工具大揭秘(百度文心 | 265点数解答 | 2023-11-09 18:26:00)302
- 工程师揭秘:强大的 Android 工具 ADB 到底是什么?(百度文心 | 267点数解答 | 2023-11-09 18:28:22)286