封装,就是基于对一个事物的抽象分析、概念分离,把它本质的或者抽象者所关注的属性点,收集到我们所说的类Class中。属性的访问权限如何,取决于Class的使用场景。但,一般为私有private,通过相关方法的定义及设计(如set、get等)为外部访问类提供可访问操作的接口。
封装基于抽象,封装的本质在于属性点。有人或许说方法的封装才是本质所在。但,方法的作用是什么,不是在设计逻辑上对属性点的修改?方法可比一个人的动作行为,而属性可比人的器官等——没有眼睛,那你张不张开眼皮有什么区别?
封装的特性有很大的价值,“高内聚性”就是一个体现、“单一职责原则”是一个设计要求……
昨天看到一个这样的介绍:
在Java Web上,访问网站时,一般要考虑cookie的设计。可能一开始,会在一个Servlet上实现一个创建Cookie,并加密数据的方法。往后在用户访问系统资源前,先通过一个Filter对Cookie的信息进行解密验证,即在该Filter上实现一个解密Cookie的方法。如下:
这可以实现我们的目的,但,不是优雅的设计。
因为它更是一个面向过程的设计方法。其引发的问题是,在维护这一个cookie上,要实现的跨度是很大的,并没有内聚的。为什么我们不把关于Cookie的属性,方法封装到一个类中呢?如下:
这,可以对比上述设计方法了吧。
所以,封装的特性及应用,要理解运用好。