文档章节

打破封装

Kiss_Coder
 Kiss_Coder
发布于 2016/05/07 00:49
字数 408
阅读 25
收藏 0

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

    考虑如下场景,你写了一个新的类,声明了一些私有的成员变量,你使用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;
    }
}

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

© 著作权归作者所有

共有 人打赏支持
上一篇: 王垠
Kiss_Coder
粉丝 2
博文 20
码字总数 2681
作品 0
深圳
程序员
私信 提问
2017年--阿里大神教你如何理解JAVA中的反射机制

反射,当时经常听他们说,自己也看过一些资料,也可能在设计模式中使用过,但是感觉对它没有一个较深入的了解,这次重新学习了一下,感觉还行吧! 一,先看一下反射的概念: 主要是指程序可以...

JAVA大神
2017/11/24
0
0
Alpha 版 Ubuntu 17.10 月底发布:支持 PIE,Python 3.6 系列

最新发布的Ubuntu基金会团队每周时事通讯中,来自Canonical的Steve Langasek带来了一些关于即将到来的Ubuntu 17.10(Artful Aardvark)发行版本的好消息。首先,Ubuntu 17.10的首个Alpha版本...

局长
2017/06/19
2.3K
13
java多线程和长连接,三方转换通信的实践(1)——转换端程序

由于工作网络安全关系,我们一个项目的公共服务网站部署在外网,而数据库(并非只供外网访问,内网也要使用数据库)部署在内网,重要的是外网不能直接访问内网,这就打破原来网站的访问顺序了...

JackChenzp
2018/10/19
0
0
如何优雅的处理循环引用(retain cycle)

什么是循环引用? 顾名思义, 就是几个对象某种方式互相引用, 形成了"环"。由于 Objective-C 内存管理使用引用计数的架构, 而并不是 GC(garbage collector), 而在 ARC(自动引用计数) 下所有 OC...

__block
2018/06/13
0
0
设计模式——Java中常用的9种设计模式

Factory Pattern(工厂模式)   将程序中创建对象的操作,单独出来处理,大大提高了系统扩展的柔性,接口的抽象化处理给相互依赖的对象创建提供了最好的抽象模式。 2. Facade Pattern (门面...

utopia1985
2013/06/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

简单模仿配置文件的反射机制

//Student类 public class Student { public void love() { System.out.println("python"); } } //Tesy类 public class Tesy { public static void main(String[] args) throws Exceptio......

南桥北木
31分钟前
2
0
你真的需要了解一下CSS变量 var()的用法

当Web项目变得越来越大时,他的CSS会变得像天文数字那么大而且还变得混乱。为了帮助我们解决这个问题,新的CSS变量很快就会出现在主流浏览器中,它让开发人员能够重用并轻松编辑重复出现的C...

前端小攻略
34分钟前
0
0
嵌入式应用选择合适的微控制器

为嵌入式应用选择微控制器有几个原因,即低成本,高集成度,增加可靠性,节省空间等。 准备所需硬件接口列表使用微控制器的基本硬件框图,准备一份微控制器需要支持的所有外设接口的列表。微...

linux-tao
今天
5
0

中国龙-扬科
今天
2
0
使用apicloud开发移动端APP,IOS list页面滚动卡顿解决记录

给内容容器添加样式:-webkit-overflow-scrolling:touch; -webkit-overflow-scrolling:属性控制元素在移动设备上是否使用滚动回弹效果. auto:使用普通滚动, 当手指从触摸屏上移开,滚动会立即...

万建宁
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部