单例,静态工厂,构造器

原创 2016年06月02日 15:30:32

1.effective in java 第一条,尽量用静态方法代替构造器

1.静态工厂不必每次都创建新对象。 如Boolean.valueof(boolean)

## 实例受控的类,确保是singleton(单例),或者是不可实例化的。


单例   singleton 仅被实例化一次的类,

注意确保如下几点

singleton构造方法必须私有,使得无法通过new来生成第二个实例,

确保对象仅有一个,尤其在多线程下用到静态工厂方法

确保反序列化时不会重新创建对象。


多种方法编写单例类对象     (饿汉单例模式)  

 1.   // 静态工厂方法 单例方法1   饿汉单例模式
    private static final SingleInstance s = new SingleInstance();

    public static SingleInstance getInstance() {
        return s;
    }


  //公有的静态域直接返回单例的对象


2. 静态工厂懒汉模式

  // 懒汉模式
    private static SingleInstance sss;

    // 加锁后导致不必要资源浪费,每次都同步
    public synchronized static SingleInstance get() {
        if (sss == null) {
            sss = new SingleInstance();
        }
        return sss;
    }

3. DLC静态工厂方法,举个标准用法,ImageLoader源码里的

   private volatile static ImageLoader instance;

    /**
     * Returns singleton class instance
     */
    public static ImageLoader getInstance() {
        if (instance == null) {
            synchronized (ImageLoader.class) {
                if (instance == null) {
                    instance = new ImageLoader();
                }
            }
        }
        return instance;
    }


//代码里通过2次判空来同步必要的情况


// 由于内存模型,静态工厂方法多线程情况下也会有问题,即使用了双重锁定也一样

所以加上修饰符:

volatile 是1.5后优化JAVA内存模型的关键字,DLC标准写法如上,ImageLoader内部就是如此



3.  java1.5后可以通过枚举

上述几种情况在反序列化时重新生成对象。只有枚举不会。


4.静态内部类    推荐


5.hashmap里的单例




设计模式之静态工厂、工厂方法和抽象工厂的联系与区别

解析: 开闭原则:对扩展开放,对修改封闭。静态工厂增加需要是修改源代码,对修改不封闭,不符合开闭原则。...
  • sinat_35512245
  • sinat_35512245
  • 2017年02月06日 11:31
  • 1989

Java中用静态工厂方法代替构造器的优缺点

Effective Java学习几笔,静态工厂方法的善用。 一般情况下,对于类而言,我们获取一个类的实例时,最常用的方法是提供一个公有的构造器。 但是还有一种方法,类可以提供一个公有的静态工厂方法,...
  • moyu123456789
  • moyu123456789
  • 2016年09月04日 00:31
  • 2163

Spring 使用静态工厂方式实例化Bean

知识点介绍:静态工厂顾名思义,就是通过调用静态工厂的方法来获取自己需要的对象,为了让spring管理所有对象,我们不能直接通过"工程类.静态方法()"来获取对象,而是依然通过spring注入的形式获取...
  • ma_hoking
  • ma_hoking
  • 2014年12月20日 21:00
  • 3229

如何书写一手优雅的代码之1:考虑用静态工厂方法代替构造器(EffectiveJava)

lz敲代码这些年其实还没有思考过这个问题,其实说白了,之前的做法无非就是创建一个公有的构造器,当需要时便new,代码如下: public class Role01 { private S...
  • wanggangabc111
  • wanggangabc111
  • 2018年01月11日 16:41
  • 21

第一条:考虑用静态工厂方法代替构造器

获取类的实例,类可以提供一个公有的构造器,还可以提供一个公有的静态工厂方法(static factory method),它只是一个返回类的实例的静态方法。例如: public static Boo...
  • Young_xiaoT
  • Young_xiaoT
  • 2016年04月13日 13:45
  • 444

第1条:考虑用静态工厂方法代替构造器

首先我们先看下一个类RandomIntBuilder,用来创建随机的Int整数 public class RandomIntBuilder { private final int min; ...
  • qq_24835809
  • qq_24835809
  • 2017年12月14日 20:29
  • 23

01、静态工厂方法替代构造器

静态工厂方法替代构造器
  • z1137730824
  • z1137730824
  • 2017年10月13日 21:22
  • 143

Effective java第一条:考虑用静态工厂方法代替构造器

一、创建对象构造方法public Boolean(String s) { this(toBoolean(s)); } Boolean bTrue = new Boolean("true");静态工...
  • lsluffy
  • lsluffy
  • 2017年10月31日 16:27
  • 60

01-考虑用静态工厂方法代替构造器

本文目录 简介 优势 缺点 服务提供者框架 简介如果想要获取一个类的实例,最常用的方法就是提供一个公有的构造器,除此之外,类还可以提供一个公有的静态工厂方法,它是一个返回类的实例的静态方法。下面是Ja...
  • plain_maple
  • plain_maple
  • 2017年01月15日 18:22
  • 191

1、考虑用静态工厂方法代替构造器(effective java)

考虑静态构造方法这里的静态构造方法不等于设计模式中的工厂模式public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE...
  • guanhang89
  • guanhang89
  • 2016年06月07日 14:35
  • 711
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:单例,静态工厂,构造器
举报原因:
原因补充:

(最多只允许输入30个字)