博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
打破封装
阅读量:6238 次
发布时间:2019-06-22

本文共 791 字,大约阅读时间需要 2 分钟。

hot3.png

    面向对象编程的核心特征之一是封装--保护内部的域变量免受外部的干预 。但是很多程序因为自动生成的代码,违背了封装的原则。

    考虑如下场景,你写了一个新的类,声明了一些私有的成员变量,你使用IDE生成了get/set方法。为每一个变量生成公有的方法完全破坏了变量私有化的意图。

    比如,你定义一个Custom类,有许多地址变量(比如街道、城市、省、邮编)。如果你为每一个变量生成get/set方法,别人就可以任意修改这些变量,让Custom对象有一个不完整的地址信息。通常情况下,Customer有一个完整的地址信息或者没有地址信息。不要让你的代码把Custom对象的地址信息变得和真实的业务意义不符。为地址信息生成get方法没有问题,但是你应该为地址信息定义一个原子的操作方法,而不是为每一个地址信息生成set方法。

class Customer {    private String _adrLine;    private String _city;    private String _state;    private String _zip;        public void addAddress(String adrLine, String city, String state, String zip) {        _adrLine = adrLine;        _city = city;        _state = state;        _zip = zip;    }}

    有一个原子的操作方法意味着你的对象从一个合法的状态一步转化为另一个合法的状态。这样,你能省去验证对象状态合法的代码。如果你不会创造一个非法的状态,你也不用去验证它。    

转载于:https://my.oschina.net/kisscoder/blog/671128

你可能感兴趣的文章
任务状态机
查看>>
cocos2dx 实现软渲染引擎 soft rendering engine
查看>>
移动H5前端性能优化指南
查看>>
报表制作工具中自定义函数概述
查看>>
Sqoop2从Mysql导入Hdfs (hadoop-2.7.1,Sqoop 1.99.6)
查看>>
浮点数指令
查看>>
无法删除文件名称过长的文件
查看>>
手机端页面流畅滚动
查看>>
CentOS下 CPU 负载观察和性能监测
查看>>
Magento产品页面包屑导航(Breadcrumb)修正
查看>>
struts2 多文件上传
查看>>
在样式中控制列表长度
查看>>
项目经理之项目经理应该做什么(转)
查看>>
Git 分支 - 分支的衍合
查看>>
ubuntu在vmware下的安装与配置
查看>>
codewars050: 丢失的数组的长度
查看>>
JavaScript获取元素在浏览器画布中的绝对位置【转】
查看>>
程序员小说《OutOfMemory》第三次更新的部分
查看>>
interface和abstract interface
查看>>
Android之rild进程启动源码分析
查看>>