封装(Encapsulation)是OOP的一大重要特性,为什么要进行封装呢?如何进行封装呢?站在用户的立场考虑,有些则需要见,有些则不需要见。而对那些要见得东西,我们要考虑用户思考、用户体验、用户习惯,总之,一切为了用户,毕竟,他们是我们的“衣食父母”。相反,对于那些不需要见得东西,我们可以设计成“黑盒子”,至于里面是些什么以及里面是如何工作的,用户不关心。而这样的“黑盒子”,就是所谓的封装。
实际上,我喜欢把封装当做一种思想来看待,在这种思想的指导下,一是可以对数据、逻辑业务等进行安保;二是便于可操控人员(架构师、开发者等)的管理;三是符合用户使用心理(简单、易用等)。Java语言中通过访问权限实现对数据成员和方法的封装,若是不需要见的东西可以设定为私有化,即用关键字private修饰;若是要见得东西就设定为公有化,即用关键字public修饰。为了方便理解,阅读如下代码:
/**
*封装思想的展示
*/
public class Customer {
/**
*方法描述:默认构造方法
*输入参数:无
*返回类型:无
*/
public Customer() {
}
/**
*方法描述:构造方法
*输入参数:String name,int id)
*返回类型:无
*/
public Customer(String name,int id) {
this.name = name;
this.id = id;
}
/**
*方法描述:设置属性名字的方法
*输入参数:String name
*返回类型: void
*/
public void setName(String name) {
this.name = name;
}
/**
*方法描述:获取属性名字的方法
*输入参数:无
*返回类型: String
*/
public String getName() {
return (this.name);
}
/**
*方法描述:设置属性号码的方法
*输入参数:int id
*返回类型: void
*/
public void setId(int id) {
this.id = id;
}
/**
*方法描述:获取属性号码的方法
*输入参数:无
*返回类型: int
*/
public int getId() {
return (this.id);
}
/**
*方法描述:主方法
*输入参数:String[] args
*返回类型: void
*/
public static void main(String[] args) {
Customer tom = new Customer();
tom.setName("Tom");
tom.setId(1);
Customer jack = new Customer("Jack",2);
System.out.println("第一个客户的信息:");
System.out.println("name=" + tom.getName() + "\tid=" + tom.getId());
System.out.println("第二个客户的信息:");
System.out.println("name=" + jack.getName() + "\tid=" + jack.getId());
}
//封装的数据成员,只能在该类中被使用,通过编写设置和获取方法来控制
private String name;
private int id;
}
运行结果如下所示:
第一个客户的信息:
name=Tom id=1
第二个客户的信息:
name=Jack id=2
总结:
1.封装不仅是OOP的重要特性之一,也是OOD的重要思想之一。
2.不管是文章所提到的“见与不见”,还是设计理念中的“开放与关闭”原则,实则都涉及到封装。
3.“站得高,看得远”,不仅从编程角度,更要从设计的角度认识封装。