java学习第五篇---单例设计模式

来源:互联网 发布:容易猝死的职业知乎 编辑:程序博客网 时间:2024/06/06 07:19

虽然进度很慢,但如果能把自己学的每个东西都吃透也算是值得了。加油,加油,加油!

设计模式:解决某一类问题,最行之有效的方法,java中有23中设计模式。

单例设计模式:解决一个类在内存中只存在一个对象的问题。

想要保证对象唯一:
1)为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象
2)还为了让其他程序可以访问到该类对象,只好在本类中自定义一个对象
3)为了方便其他程序对自定义对象的访问,可以提供一些访问方式。
代码体现:
1)将所有构造函数私有化,这样可禁止其他程序建立对象
2)在类中创建本来对象

3)提供一个可以获取该对象的方法,又因为该类不能创建对象,要访问类中方法只能采用“类名.方法名”的方式,因此此时方法要设成静态的。又因为静态方法中不能引用非静态变量,所以上面创建对象时也要设成静态的。

class Student{private Student(){}   // 构造函数私有化private static Student st = new Student(); // 创建private属性的对象
<span style="white-space:pre"></span>//可以获取对象的静态方法public static Student getInstance() {return st;}private int age;public void setAge(int age){this.age = age; }public int getAge(){return age;}}class SingleDemo{public static void main(String[] args){
                //实验确定ss和ss2是指向同一个对象的
Student ss = Student.getInstance();Student ss2 = Student.getInstance();ss.setAge(35);System.out.println(ss2.getAge());}}
注意:单利设计模式存在饱汉式和饿汉式两种方式,上面介绍的是饿汉式,也是平时最常用的一种方式。饱汉式的设计方式是:

class Single{private static Single s = null;private Single(){}public static Single getInstance(){if(s==null){
<span style="white-space:pre"></span>synchronized(Single.class)
<span style="white-space:pre"></span>{
<span style="white-space:pre"></span>if(s==null){
<span style="white-space:pre"></span>s = new Single():
<span style="white-space:pre"></span> <span style="white-space:pre"></span>}
<span style="font-family: Arial, Helvetica, sans-serif;"></span><span style="font-family: Arial, Helvetica, sans-serif;">}</span>

<span style="white-space:pre"></span>}return s;}}
这里多了一个对对象是否创建的判断,代码稍显复杂。所以最常用的还是饿汉式。

之前用到过多线程就一直没搞懂这个异步操作,今天算是有一些明白了,简要介绍下synchronized。这其实就是一个锁,被他修饰的代码块只能同时被一个程序访问。即,每个程序执行到synchronized(Single.class)关键字时会先判断,下面是否有程序正在执行代码块内内容,如果有则后面的程序不能进入执行,只能等上一个执行完了才可以进入执行。

0 0
原创粉丝点击