Android中常见的设置模式

参考Android中常用的设计模式

1.单例模式:确保一个类只有一个实例,并且自行实例化并向整个系统提供整个实例。优点:

构造函数私有化,定义静态函数获得实例就不多说了,这里着重说一下volatile:volatile本质是在告诉jvm当前变量在寄存器中的值是不确定的,需要从内存中读取,synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住.(首先我们要先意识到有这样的现象,编译器为了加快程序运行的速度,对一些变量的写操作会先在寄存器或者是CPU缓存上进行,最后才写入内存。而在这个过程,变量的新值对其他线程是不可见的.而volatile的作用就是使它修饰的变量的读写操作都必须在内存中进行!) 再就是这个双重判断null :这是因为如果线程A进入了该代码,线程B 在等待,这是A线程创建完一个实例出来后,线程B 获得锁进入同步代码,实例已经存在,木有必要再创建一个,所以双重判断有必要。

2.Builder 模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。给Person类添加一个静态Builder类,然后修改Person的构造函数,如下:

从上边代码我们可以看到我们在Builder类中定义了一份跟Person类一样的属性,通过一系列的成员函数进行赋值,但是返回的都是this,最后提供了一个build函数来创建person对象,对应的在Person的构造函数中,传入了Builder对象,然后依次对自己的成员变量进行赋值。此外,Builder的成员函数返回的都是this的另一个作用就是让他支持链式调用,使代码可读性大大增强。于是我们就可以这样创建Person对象:

可见大量框架运用了Builder 设计模式,总结一下吧:

1).定义一个静态内部类Builder,内部成员变量跟外部一样;

2).Builder通过一系列方法给成员变量赋值,并返回当前对象(this);

3).Builder类内部提供一个build方法方法或者create方法用于创建对应的外部类,该方法内部调用了外部类的一个私有化构造方法,该构造方法的参数就是内部类Builder;

4).外部类提供一个私有化的构造方法供内部类调用,在该构造函数中完成成员变量的赋值。

观察者模式

1. 理论概念:定义对象间的一种一对多的依赖关系,当一个对象的状态发送改变时,所有依赖于它的对象都能得到通知并被自动更新。1).观察者,我们称它为Observer,有时候我们也称它为订阅者,即Subscriber;2).被观察者,我们称它为Observable,即可以被观察的东西,有时候还会称之为主题,即Subject。

2.我们来模拟上边的场景,先定义一个Weather的类:

3.然后定义我们的被观察着,我们希望它能够通用,所以定义成泛型,内部应该暴露出register和unRegister供观察者订阅和取消订阅,至于观察者的保存,我们用ArrayList即可,另外,当主题发生变化的时候,需要通知观察者来做出响应,还需要一个notifyObservers方法,具体实现如下:

4.而我们的观察者只需要实现一个观察者的接口Observer,该接口也是泛型的。

5.一旦订阅的主题发生了变化,就会调用该接口。

用一下,我们定义一个天气变化的主题,也就是被观察者,再定义两个观察者来观察天气的变化,一旦变化了就打印出天气的情况,注意,一定要用register方法来注册,否则观察者收不到变化的信息,而一旦不感兴趣,就可以调用unregister方法。

6. 下面是输出语句:

7.开发中很多其他的方式也用到观察者模式。

8. Android里面的典型例子叫点击监听器 - onClickListener, 对设置onClickListener来说, View是被观察者,onClickListener是观察者,两者通过setOnClickListener()方法来达成订阅关系。订阅之后用户点击按钮的瞬间,Android Framework 就会将点击事件发送给已经注册的OnClickListener。采取这样被动的观察方式,既省去了反复检索状态的资源消耗,也能够得到最高的反馈速度。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,742评论 18 399
  • 设计模式是解决特定问题的一系列套路。设计模式的使用不是语法规定,不要为了套用设计模式而用设计模式,它的使用为了解决...
    闲庭阅读 7,407评论 2 18
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,853评论 18 139
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,686评论 0 11
  • 当今社会,做销售的很多,做保险销售或做过保险销售的更如过江之鲫。但是,大家都知道,保险如果做好了收入非常丰厚...
    e77db14565af阅读 792评论 0 1