面向对象的封装是将类的某些信息隐藏在类的内部,不允许外部程序直接访问,通过该类提供的方法来实现对隐藏信息的操作和访问。封装的重点在于隐藏信息和提供访问的接口,这是程序设计的基本思想,便于程序功能的扩展和维护。
封装的目的:1.隐藏类的实现细节。2.让使用者只能通过指定的方法访问数据,可以方便进行逻辑控制,限制不合理的操作。3.在代码层面上可以便于修改,增加代码可维护性。
Java语言通过访问控制符来实现类的封装,访问控制符限定了被修饰者的可见性;Java中有四种访问控制符:1.default(默认)。2.public(公共)。3.protected(保护)。4.private(私有)。类的访问控制一般有两种:1.默认,即修饰符为空,该类只能被自身所在包中的类访问。2.public,该类能被所有包中的类使用。而类的属性和方法的访问控制符包含以上四种,访问权限由大到小依次为:1.public,可以被所有的类访问。2.protected,可以被这个类本身访问,可以被这个类的子类访问(包括同一个包和不同包的子类),可以被同一个包中所有其他类访问。3.default,可以被这个类本身访问,可以被同一个包中的类访问。4.private,只能被这个类本身访问。
在实际项目开发中,封装的常用之处是用来构造POJO,即最简单的Java Bean,Java Bean中包含了private 修饰的各种属性及其Get/Set方法。
封装的设计思想:提供对外的访问接口,隐藏内部的实现方式。
封装的基本原则:1.类常常是public。2.属性常常是private。3.构造方法一般是public。4.Get/Set方法一般是public。5.其他方法根据业务需要来确定是私有还是公共的。
对封装的一个高级应用就是私有化构造方法,即将构造类的对象的方法进行封装,提供给外部唯一的访问接口,使得整个对象在程序中保持唯一性。这是单例模式的设计原理。对象在实例化时会调用类的构造方法,如果将构造方法私有化(即进行隐藏),则外部无法实例化对象,若我们在该类的内部实例化对象,并提供一个方法将该实例返回出去,则其他类也可以获取到这个对象,并且保证了这个对象在程序中的唯一性。
要保证对象的唯一性需要做到:
1.避免其他类多次创建该对象,禁止其他类创建该对象,即将构造方法私有化。
2.为了让其他类可以访问到该对象,则在该类中实例化一个对象。
3.对外提供一个访问该对象的唯一入口。
最基础的饿汉式单例模式代码实现如下:
Public class SingleTon(){
Private static SingleTon single=new SingleTon();//创建一个实例对象
Private SingleTon(){//构造方法私有化
}
Public static SingleTon getInstance(){//给外部提供唯一的访问入口
Return single;
}
}
单例模式的核心是构造方法的私有化(即在入口处限制了对象的实例化),之后在类的内部实例化对象,并通过静态方法返回实例化对象的引用。