文档章节

打破封装

Kiss_Coder
 Kiss_Coder
发布于 2016/05/07 00:49
字数 408
阅读 24
收藏 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
如何优雅的处理循环引用(retain cycle)

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

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

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

utopia1985
2013/06/19
0
0
火狐成首款被网银支持的非IE浏览器

近日,国有四大行之一建设银行宣布支持Firefox(火狐)浏览器,国内网上银行对非IE浏览器的 兼容性再一次取得阶段性成果。 Firefox(火狐)浏览器自发布以来,以其“安全、个性、快速”的理念...

红薯
2010/02/10
1K
8

没有更多内容

加载失败,请刷新页面

加载更多

992. Sort Array By Parity II - LeetCode

Question 992. Sort Array By Parity II Solution 题目大意:给一个int数组,一半是奇数一半是偶数,分别对偶数数和奇数数排序并要求这个数本身是偶数要放在偶数位上 思路:把奇数数和偶数数...

yysue
20分钟前
1
0
Snackbar源码分析

目录介绍 1.最简单创造方法 1.1 Snackbar作用 1.2 最简单的创建 1.3 Snackbar消失的几种方式 2.源码分析 2.1 Snackbar的make方法源码分析 2.2 对Snackbar属性进行设置 2.3 Snackbar的show显示...

潇湘剑雨
51分钟前
1
0
分布式作业系统 Elastic-Job-Lite 源码分析 —— 作业数据存储

分布式作业系统 Elastic-Job-Lite 源码分析 —— 作业数据存储 摘要: 原创出处 http://www.iocoder.cn/Elastic-Job/job-storage/ 本文基于 Elastic-Job V2.1.5 版本分享 1. 概述 本文主要分享...

DemonsI
58分钟前
1
0
jmockit demo

1、@Mocked,标识一个指定的class的实例或被测对象的参数被Mock掉。 2、@Capturing,标识一个被Mock的对象,从该对象派生的子类也被Mock了。 3、@Injectable,标识只有一个指定的被测对象的内...

我的老腰啊
今天
1
0
内容换行

用 <textarea>13611112222 这里想换行 13877779999</textarea><textarea>13611112222 13877779999</textarea>...

小黄狗
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部