米鼠商城

多快好省,买软件就上米鼠网

最新项目

人才服务

靠谱的IT人才垂直招聘平台

java入门(二十六) | 设计模式之单例设计

  • DDAlex
  • 9
  • 2020-07-30 09:27

精选30+云产品,助力企业轻松上云!>>>

设计模式

软件设计模式又称为设计模式,是一套被反复利用、经过分类的、代码设计经验的总结。 使用设计模式是为了可重用代码让代码更容易的被人理解,保证代码的可靠性、程序的重用性。 Java中有23种设计模式,常见的设计模式有:单例设计模式、工厂模式、代理模式、策略模式、委托模式、责任链模式等。

1.1 单例设计模式概念

单例模式可以说是大多数开发人员在实际中使用最多的. 常见的Spring默认创建的bean就是单例模式的。 单例模式有很多好处,比如可节约系统内存空间,控制资源的使用。 其中单例模式最重要的是确保对象只有一个。 简单来说,保证一个类在内存中的对象就一个。 RunTime就是典型的单例设计,我们通过对RunTime类的分析,一窥究竟。

1.2 源码解析

/**
 * Every Java application has a single instance of class
 * <code>Runtime</code> that allows the application to interface with
 * the environment in which the application is running. The current
 * runtime can be obtained from the <code>getRuntime</code> method.
 * <p>
 * An application cannot create its own instance of this class.
 *
 * @author  unascribed
 * @see     java.lang.Runtime#getRuntime()
 * @since   JDK1.0
 */
RunTime.java
package java.lang;
 
public class Runtime {
    //1、创建静态的全局唯一的对象
    private static Runtime currentRuntime = new Runtime();
 
    //2、私有构造方法,不让外部来调用
    /** Don't let anyone else instantiate this class */
    private Runtime() {}
 
    //3、通过自定义的静态方法获取实例
    public static Runtime getRuntime() {
        return currentRuntime;
    }
}

1.3 饿汉式

package cn.qile.design;

//测试单例设计模式:减少对象的创建次数,保证整个项目中只有一个类的实例
public class Test1_Singleton {
    public static void main(String[] args) {
        //TODO 测试真的只有一个对象吗???
        Single s = Single.getSingle();
        System.out.println(s);//地址值,cn.qile.design.Single@12a3a380

        //TODO 测试真的只有一个对象吗???
        Single s2 = Single.getSingle();
        System.out.println(s2);//地址值,cn.qile.design.Single@12a3a380

        // == 默认比较的是对象的地址值,如果地址值相同返回true,也就是同一个对象
        // == 比较基本类型数据时,比较的是数据的值。
        // == 比较引用类型时,比较的是地址值。
        System.out.println(s==s2);//true

    }
}
//创建Single类
class Single{
    //1、私有化构造方法  -- 目的是不让外界随便new
    private Single() {}
    //2、在类的内部创建对象
    //static是因为getSingle()是静态的 调用的 只能是 静态资源
    static private Single s = new Single();

    //3、提供供的get(),把创建好的对象,返回调用位置
    //static是因为外界new不了了,只能通过类名.调用了
    static public Single getSingle(){
        return s;
    }
}

1.4 懒汉式

package cn.qile.design;

//测试单例设计模式:减少对象的创建次数,保证整个项目中只有一个类的实例
public class Test1_Singleton {
    public static void main(String[] args) {
        //TODO 测试真的只有一个对象吗???
        Single s = Single.getSingle();
        System.out.println(s);//地址值,cn.qile.design.Single@12a3a380

        //TODO 测试真的只有一个对象吗???
        Single s2 = Single.getSingle();
        System.out.println(s2);//地址值,cn.qile.design.Single@12a3a380

        // == 默认比较的是对象的地址值,如果地址值相同返回true,也就是同一个对象
        // == 比较基本类型数据时,比较的是数据的值。
        // == 比较引用类型时,比较的是地址值。
        System.out.println(s==s2);//true

    }
}
//创建Single类
class Single{
    //1、私有化构造方法  -- 目的是不让外界随便new
    private Single() {}
    //2、在类的内部创建对象
    //static是因为getSingle()是静态的 调用的 只能是 静态资源
    static private Single s = null;

    //3、提供供的get(),把创建好的对象,返回调用位置
    //static是因为外界new不了了,只能通过类名.调用了
    static public Single getSingle(){
        //懒汉式:线程安全问题
        if(s == null) {
            s = new Single();
        }
        return s;
    }
}


城市合伙人全球招募中:400-150-9800

参与线下宏伟蓝图,用业绩说话!
软件线索、软件需求,米鼠网帮你变现!
更灵活的合作模式(不限地域、不限金额、不限项目)
更高额的提成比例(提成是软件项目利润的80%)
利润的核算方式:
以平台公开招标的最低价中标价格为基准,剩下的为利润部分,如对平台的最低中标价格有异议,可以推荐供应商进行竞标。
义务:
1、作为城市合伙人,在该城市利用自身优势推广“米鼠网平台”,拓展甲 方所拥有的“米鼠网平台”实名认证用户和 VIP 用户
2、作为城市合伙人,在该城市利用自身优势推广“米鼠网商城”,并寻求该地域软件产品销售商,促成软件产品销售商委托甲方在“米鼠网商城”上代理销售软件产品销售商的软件产品的交易,并拓展软件产品采购用户促成与甲方的采购交易。



如有侵权请联系邮箱(service@misuland.com)

猜你喜欢

评论留言