开发者社区> 余二五> 正文

如何保证对象的唯一性

简介:
+关注继续查看
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/*
如何保证对象的唯一性:
   1.不允许其他程序用new来创建该类对象。
   2.在该类创建一个本类实例。
   3.对外提供一个方法让其他程序可以获取该对象的引用。
*/
public class Test{
    public static void main(String[] args){
        
       //Subject sub = Subject.oSub;//这种方法不可控,一般不访问成员
       Subject sub = Subject.getInstance();//我们可以在方法中增加条件,根据条件是否返回对象的引用,增加程序的可控性!
       new Student().show(sub);
       new Teacher().show(sub);
   }
}
 
class Subject{
    public  String sub;
    public static Subject oSub = new Subject();
    private Subject(){
        sub = "计算机科学与技术";
    }
     
    public static Subject getInstance(){
        //oSub = new Subject();
        //if(****) 增加 if 判断 可以 增加程序的可控性
        return oSub;
    }
     
    public String getSubject(){
        return sub;
    }
     
    public void setSubjcet(String name){
        sub = name;
    }
}
 
/*
 静态成员变量和普通成员变量的显示初始化的不同之处:
 以下面的例子为例:
 静态变量的显示初始化编译之后不会放进 构造函数中!(想一想啊,如果放进了构造函数中,那不就是产生对象了吗?那可能吗?
      它是静态的,是属于类的!普通成员变量是属于对象的,所以显示初始化会放进构造函数中)所以不会使构造函数一直调用,最终栈溢出
 而普通成员变量的显示初始化编译之后回放进构造函数中, 这样就会导致构造函数一直被反复调用!
 class Subject{
    public  String sub;
    //public Subject ss = new Subject();
    public static Subject oSub = new Subject();//恶汉式
        //public static Subject oSub = null;//懒汉式
    private Subject(){
            //oSub = new Subject();//oSub是静态变量,加上这一句就会导致oSub显示初始化时栈溢出!
        sub = "计算机科学与技术";
    }
     
    public static Subject getSubject(){       
        return oSub;
                //return oSub = new Subject();
    }
}
*/
 
class Student{
    public void show(Subject sub){
        System.out.println(sub.sub);
    }
}
 
class Teacher{
    public void show(Subject sub){
        System.out.println(sub.sub);
    }
}









本文转自 小眼儿 博客园博客,原文链接:http://www.cnblogs.com/hujunzheng/p/3872833.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
幂等性与防重的区别
自己的一点小理解
6 0
遵循Happens-Before规则来保证可见性|而非掌握所有底层
基于JSR -133内存模型提出了happens-before的概念,通过这个概念来阐述操作之间的内存可见性。要保证可见性,就是遵守 Happens-Before 规则,合理的使用java提供的工具。
42 0
如何保证接口幂等性?一口气说了12种方法!
幂等性原本是数学上的概念,用在接口上就可以理解为:**同一个接口,多次发出同一个请求,必须保证操作只执行一次**。调用接口发生异常并且重复尝试时,总是会造成系统所无法承受的损失,所以必须阻止这种现象的发生。
280 0
分布式事物如何保证接口请求顺序性?
前言 先抛出一个问题大家思考一下:在分布式系统中,我们如何保证多个请求的顺序性问题,比如有A/B两个系统,系统A在一次订单业务处理中,向B系统发送三次请求,先进行插入订单操作,然后对订单状态进行修改,最后增加用户积分。 但是这三次请求分别落在了不同的机器上,并且插入订单的操作由于一些意外导致延迟,修改订单操作先执行了,但是此时并没有订单信息,也就会出现我们期望之外的结果了。
55 0
这8种保证线程安全的技术你都知道吗?(下)
这8种保证线程安全的技术你都知道吗?(下)
59 0
这8种保证线程安全的技术你都知道吗?(上)
这8种保证线程安全的技术你都知道吗?
59 0
分布式ID(唯一性)的生成方法汇总
分布式ID(唯一性)的生成方法汇总
306 0
分布式环境下如何保证 ID 的唯一性
首先说下我们为什么需要分布式 ID,以及分布式 ID 是用来解决什么问题的。当我们的项目还处于单体架构的时候,我们使用数据库的自增 ID 就可以解决很多数据标识问题。但是随着我们的业务发展我们的架构就会逐渐演变成分布式架构,那么这个时候再使用数据的自增 ID 就不行了,因为一个业务的数据可能会放在好几个数据库里面,此时我们就需要一个分布式 ID 用来标识一条数据,因此我们需要一个分布式 ID 的生成服务。那么分布式 ID 的服务有什么要求和挑战呢?
259 0
接口的幂等性设计和防重保证,详细分析幂等性的几种实现方法
本篇文章详细说明了幂等性,解释了什么是幂等性,幂等性的使用场景,讨论了幂等和防重的概念。分析了幂等性的情况以及如何设计幂等性服务。阐述了幂等性实现防重的几种策略,包括乐关锁,防重表,分布式锁,token令牌以及支付缓冲区。
2648 0
+关注
余二五
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
事务、全局索引、透明分布式
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载