恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

Java面向对象编程:Point类的封装与设计模式实践

  • 首页
  • 资讯中心
  • /
  • Java面向对象编程:Point类的封装与设计模式实践

相关资讯

Windows部署OpenClaw:接入腾讯混元与本地模型的实战指南 2026/8/5 16:19:02
AI做付费专栏:2024年最赚钱的5类AI内容模型及实操模板(附ROI数据) 2026/8/5 16:19:02
51单片机串口烧录全攻略:从CH340驱动到STC-ISP下载避坑指南 2026/8/5 16:19:02

最新资讯

AI简史终极浓缩版:7分钟掌握3代范式跃迁、4类算力瓶颈突破、以及正在消失的最后窗口期
【免费】人脸识别 智能门禁系统(深度学习+OpenCV DNN+FastAPI+Vue3) 锋哥原创出品,必属精品
3分钟快速上手:如何从网易云和QQ音乐获取精准LRC歌词文件
终极FLUX.1-dev低显存优化指南:24GB以下显卡的ComfyUI完整解决方案
如何在FF14中快速构建强大插件:Dalamud框架终极指南
为什么选择FreeRDP?5个专业技巧助你掌握跨平台远程桌面连接

今日推荐

AI小程序创业陷阱大起底(92%新手踩坑的3个致命错误)
为什么92.7%的AI 3D生成项目卡在UV重拓扑?资深TD曝光内部验证过的5步自动化修复协议
三升四,比成绩下滑更可怕的,是孩子开始「认命」

本周热门

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案
分布式配置中心选型实战:Nacos与Consul在创业场景下的对比
MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

Java面向对象编程:Point类的封装与设计模式实践

发布时间:2026/8/5 16:24:02
Java面向对象编程:Point类的封装与设计模式实践 1. Point类设计基础封装与访问控制在面向对象编程中Point类是最经典的入门案例之一。这个看似简单的二维坐标点却蕴含着面向对象三大特性之一的封装思想。我见过不少初学者直接使用public属性暴露x、y坐标这就像把自家大门钥匙插在门锁上一样危险。私有成员的正确声明方式public class Point { private double x; private double y; }这里的private关键字就是我们的门锁它确保外部代码无法直接访问x、y字段所有访问必须通过我们预设的方法进行可以在方法中添加校验逻辑保证数据安全关键经验即使像Point这样简单的类也应该从一开始就养成使用private的习惯。我在代码审查中经常发现临时图省事暴露的public字段后期要改造时往往需要修改几十处调用点。2. Getter/Setter方法设计艺术2.1 基础访问器实现标准的getter/setter看似简单但魔鬼藏在细节里public double getX() { return x; // 直接返回基本类型值 } public void setX(double x) { this.x x; // 直接赋值 }容易踩的坑忘记this关键字导致参数遮蔽(shadowing)字段对浮点数直接使用比较应该用阈值比较忽略参数校验比如坐标值是否在合理范围2.2 增强型Setter实现实际项目中setter应该承担数据校验职责public void setX(double x) { if (Double.isNaN(x)) { throw new IllegalArgumentException(坐标不能为NaN); } if (Math.abs(x) 1e6) { throw new IllegalArgumentException(坐标值超出合理范围); } this.x x; }我在GIS系统开发中就遇到过因未校验NaN值导致的定位漂移bug这种防御性编程能避免很多线上问题。3. 进阶设计技巧3.1 不可变Point实现对于多线程环境可以考虑不可变设计public final class ImmutablePoint { private final double x; private final double y; public ImmutablePoint(double x, double y) { this.x x; this.y y; } // 只有getter没有setter public double getX() { return x; } }3.2 Builder模式应用当Point需要多个构造参数时Point p new Point.Builder() .setX(10.5) .setY(20.3) .build();3.3 方法链式调用通过返回this实现流畅接口public Point setX(double x) { this.x x; return this; }4. 实际应用中的问题排查常见问题1Setter未生效检查方法签名是否正确常见拼写错误确认是否真的调用了setter可能直接访问了字段多线程环境下考虑volatile关键字常见问题2性能热点过度封装导致getter/setter成为性能瓶颈实测显示现代JVM会内联简单访问器考虑使用Contended注解避免伪共享我在性能调优时用JMH测试过简单的getter方法调用开销约2-3纳秒在绝大多数场景下可以忽略不计。5. 现代Java中的改进方案5.1 Record类型简化Java 14引入的record可以极大简化public record Point(double x, double y) {}会自动生成私有final字段公开getter方法名就是x()、y()equals/hashCode/toString5.2 Lombok注解方案Getter Setter public class Point { private double x; private double y; }使用建议新项目推荐用record老项目改造可以用Lombok。我在微服务架构中更倾向record因为它生成的代码更可控。6. 设计模式实践6.1 代理模式保护敏感操作public class ProtectedPoint extends Point { Override public void setX(double x) { if (!checkPermission()) { throw new SecurityException(); } super.setX(x); } }6.2 观察者模式实现坐标变更通知public void setX(double x) { this.x x; notifyObservers(); }在图形编辑器项目中这种设计让视图能实时响应模型变化。7. 测试要点7.1 单元测试示例(JUnit5)Test void shouldThrowWhenSetNaN() { Point p new Point(); assertThrows(IllegalArgumentException.class, () - p.setX(Double.NaN)); } Test void shouldAllowNormalValue() { Point p new Point(); p.setX(10.5); assertEquals(10.5, p.getX(), 1e-9); }7.2 边界值测试案例最大/最小双精度值正负零0.0 vs -0.0接近Double.MAX_VALUE的值8. 跨语言实践8.1 Python属性装饰器class Point: property def x(self): return self._x x.setter def x(self, value): if not isinstance(value, (int, float)): raise ValueError self._x value8.2 C#属性语法public class Point { private double _x; public double X { get _x; set _x value; } }9. 性能优化技巧缓存哈希值对于频繁参与计算的Pointprivate int hash; // 缓存字段 Override public int hashCode() { if (hash 0) { hash Objects.hash(x, y); } return hash; }对象池技术对于频繁创建的临时Pointprivate static final PoolPoint POOL new Pool(); public static Point obtain(double x, double y) { Point p POOL.acquire(); p.set(x, y); return p; }在游戏开发中这种优化可以减少90%的对象创建开销。10. 架构层面的思考在DDD中Point可以作为值对象(Value Object)实现equals/hashCode基于值而非引用设计为不可变包含业务方法如distanceTo()在微服务中需要考虑序列化方案JSON字段命名精度问题BigDecimal vs double传输优化protobuf压缩我在物联网项目中就遇到过GPS坐标使用float导致精度丢失的问题最终改用定点数表示。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号