黑马程序员技术交流社区

标题: 006分享_day08_设计模式_单例模式 [打印本页]

作者: 掉了一地..    时间: 2015-2-1 13:41
标题: 006分享_day08_设计模式_单例模式
设计模式:解决某一类问题行之有效的解决思想。
单例设计模式:(singleton)设计模式:
弄清设计模式是要解决什么问题的?
单例模式要解决的问题:保证一个类对象的唯一性。

应用场景:
    多个程序都要使用一个对象或配置文件中的数据,
而且要实现数据共享和交换,必须要将多个数据封装到一个对象中。
而且多个程序操作的是同一个对象。因此必须保证这个配置文件对象的唯一性。
怎么保证呢?:
    不让其他程序,创建该对象,自己在该类中创建一个对象,可控。
    给其他程序提供访问方式.
实现步骤:
    1,直接私有化构造函数,不让其他程序创建的对象初始化。
    2,直接在本类中new一个本类对象。
    3,定义一个功能,其他程序可以通过这个功能获取到本类的对象。

单例模式代码的一种体现:
//定义本类:
饿汉式加载方式:(无论是否调用这个类里的方法,都会创建该本类对象)
class single{
        //1,定义私有化构造函数:
        private single(){}
        //2,创建一个本类对象:可以私有化
        private static /*final*/ single s = new single();
        //3,定义一个方法返回这个对像。对对象可控
        public static single getInstance(){

                return s;
        }
}
单例模式的另一种代码体现:
对象并不在本类中创建,单例的延迟加载方式:
也叫懒汉式加载方式:(只有调用这个方法时才会创建对象)
面试时最多
//定义本类:
class single2{
        private static single2 s2 = null;
        private single2 (){}
        public static single2 getInstance(){
                if(s2==null)
                        s2 = new single2();
                return s2;
        }       
}

//调用类:
class singledemo{
        public static void main(String[] args){
                //要想获得single的对象,调用getInstance方法,既然无法通过对象调用

,只能用类名调用,所以这个方法必须是static修饰的。
                single ss = single.getInstance();
                single ss2 = single.getInstance();
                //下列方法也可以实现调用,加入访问来获得就是为了对对象可控。
//                single ss = single.s;
//                single ss2 = single.s;

        }
}
单例模式的种类:内部类加载方式,集合加载方式,单例模式子类扩展方式,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2