首页 > 代码库 > 23、保护性拷贝

23、保护性拷贝

程序有可能被恶意的使用,也就是遭受攻击,对于一个类来说,如果能够合适地使用保护性拷贝,将会使得类的安全性增大,例如:

 1 class Person{
 2     private String name;
 3     public Person(String name) {
 4         this.name = name;
 5     }
 6     
 7     private Person getPerson() {
 8         return new Person(name);
 9     }
10     
11     public void setName(String name){
12         this.name = name;
13     }
14     
15     public Person say(String content){
16         System.out.println(name + " say:" + content);
17         return getPerson();
18     }
19 
20     @Override
21     public String toString() {
22         return "Person [name=" + name + "]";
23     }
24     
25     
26 }
27 
28 
29 
30 public static void main(String[] args) {
31         Person person = new Person("lay");
32         
33         Person person2 = person.say("hahah");
34         person2.setName("marry");
35         person2.say("hehehe");
36         
37         person.say("what");
38 }

如上所示,不管使用方如何setName都只是修改了拷贝出来的数据,而person的原始数据很好地被隐藏起来。

主要因素在于,java的引用机制,多个引用指向同一个内存空间,因此只要修改引用的数据就能够破坏既定的数据。因此,我们可以利用拷贝新的内容来隐藏原始数据

23、保护性拷贝