日常纪要

最近在学MVP的模式+Retrofit+RxJava+Dagger2,遇到一些问题自己记录下来,在这里使用的单列模式是@Singleton,加注释的方法,网上百度没有,只是讲解了单列模式,然后自己顺便也去了解了一下。

单列模式

单例的实现有两个主流方式,分别是懒汉模式和饿汉模式,他们在实例化的时机和效率方面各有不同

1.懒汉模式

懒汉模式在外部对象每次获取实例时都要先判断该实例是否被初始化,这点相比饿汉模式来说就会损失一些效率,但是会节省一些空间,因为什么时候用到该实例才会去初始化.

/*
 *单例模式
 */
public class Singleton {  
    private static Singleton instance;  
    private Singleton() {} //一定要有私有构造,要不谈何单例  
    public static Singleton getInstance(){  
        if (null == instance){  
            instance = new Singleton();  
        }  
        return instance;  
    }  
}

但是在线程方面会有些问题

2.恶汉模式

饿汉模式是在系统运行起来,在装在类的时候就进行初始化的操作,外部对象使用的时候不需要做任何判断可以直接使用,从效率上来说是优于懒汉模式的.但是对比懒汉模式的延迟加载技术,不管系统用不用该实例,内存都会在最开始的时候创建出来.跟懒汉的时间换空间正好相反,饿汉是空间换时间.

public class Singleton {  
    private static final Singleton instance = new Singleton();  
    private Singleton() {}//一定要有私有构造,要不谈何单例  
    public static Singleton getInstance(){  
        return instance;  
    }  
}

而现在用的是dagger2,用注释的方法来实现的
目标类

public class A{
    @Inject
    public A() {
    }

    public String getName(){
        return "AAAAAA";
    }
}

module类

@Module
public class TestModule {

    //单例获取
    @Singleton
    @Provides
    A providesA(){
        return new A();
    }
}

component类

@Singleton
@Component(modules = TestModule.class)
public interface AComponent {

    void inject(NewActivity act);
}

activity

public class NewActivity extends AppCompatActivity {

    @Inject
    A a1;
    @Inject
    A a2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new);

        //实例化component对象
        AComponent component = DaggerAComponent.builder().aModule(new AModule()).build();

        //注入
        component.inject(this);

        //single单例只适用于一个component,也就是说下一个activity中又是不同的对象了
        Log.e("---------",a1.toString()+"           "+a2.toString());

    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值