-单例模式(Singleton),也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。
单例模式应用的场景一般发现在以下条件下:
(1)资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如项目中网络请求对象。
(2)控制资源的情况下,方便资源之间的互相通信。如线程池等。
优点:
1.在单例模式中,活动的单例只有一个实例,对单例类的所有实例化得到的都是相同的一个实例。这样就 防止其它对象对自己的实例化,确保所有的对象都访问一个实例
2.单例模式具有一定的伸缩性,类自己来控制实例化进程,类就在改变实例化进程上有相应的伸缩性。
3.提供了对唯一实例的受控访问。
4.由于在系统内存中只存在一个对象,因此可以 节约系统资源,当 需要频繁创建和销毁的对象时单例模式无疑可以提高系统的性能。
5.允许可变数目的实例。
6.避免对共享资源的多重占用。
-Builder模式
当需要创建一个对象需要很多变量组合而成,这个时候可以考虑将这个对象的创建过程和对象的表示分离开来,这样可以很简洁的构建一个复杂的对象。满足工程的高内聚低耦合的思想,以及我们的构建过程类的结构不需要改变,我们只需添加具体的操作和新的构建过程即可完成功能的实现,完全符合开放封闭原则。
常见的builder模式有创建dialog的过程。
-策略方法模式
定义:有一系列的算法,将每个算法封装起来(每个算法可以封装到不同的类中),各个算法之间可以替换,策略模式让算法独立于使用它的客户而独立变化
组成:
环境类(Context):用一个ConcreteStrategy对象来配置。维护一个对Strategy对象的引用。可定义一个接口来让Strategy访问它的数据。
抽象策略类(Strategy):定义所有支持的算法的公共接口。 Context使用这个接口来调用某ConcreteStrategy定义的算法。
具体策略类(ConcreteStrategy):以Strategy接口实现某具体算法。
使用场景:
1 许多相关类仅仅是行为不同。
2 需要使用一个算法的不同实现。
3 算法使用了客户不应该知道的数据。策略模式可以避免暴露复杂的、与算法相关的数据结构。
4 一个类定义了很多行为,而且这些行为在这个类里的操作以多个条件语句的形式出现。策略模式将相关的条件分支移入它们各自的 Strategy 类中以代替这些条件语句。
优点
可以动态的改变对象的行为
-观察者模式
定义对象间的一种一对多的依赖关系,当一个对象的状态发送改变时,所有依赖于它的对象都能得到通知并被自动更新
组成:
观察者,我们称它为Observer,有时候我们也称它为订阅者,即Subscriber
被观察者,我们称它为Observable,即可以被观察的东西,有时候还会称之为主题,即Subject
使用场景:
1 有一种短信服务,比如天气预报服务,一旦你订阅该服务,你只需按月付费,付完费后,每天一旦有天气信息更新,它就会及时向你发送最新的天气信息。
2 杂志的订阅,你只需向邮局订阅杂志,缴纳一定的费用,当有新的杂志时,邮局会自动将杂志送至你预留的地址。
使用示例:View的Onclik监听(view是被观擦着,OnClickListener是观察者),四大组件的BroadcastReceiver(注册于注销)
-工厂方法模式
我们创建的activity或者fragment中,定义基类的时候,可以将每个界面不同的地方抽象出来,让真正实现的子类去实现该统一的方法。
代理模式
定义:为其他类提供一种代理以控制这个对象的访问。
在安卓中进程通信是一个很常见的东西,如果需要进行进程通信则可以通过使用AIDL来获取远程service的代理,然后我们可以通过这个代理来执行响应的操作。
-组合模式
这种模式在安卓中最常见,Android中的view是一种树形结构,每个viewGroup包含一些列的view,而每个viewGroup本身又可以当做一个view,所以最终手机上呈现出来的界面,是由一个个view组合而成的。
-适配模式
其实适配器模式很容易理解,我们在Android开发时也经常用到。比较典型的有ListView和RecyclerView。为什么ListView需要使用适配器呢?主要是,ListView只关心它的每个ItemView,而不关心这个ItemView具体显示的是什么。而我们的数据源存放的是要显示的内容,它保存了每一个ItemView要显示的内容。ListView和数据源之间没有任何关系,这时候,需要通过适配器,适配器提供getView方法给ListView使用,每次ListView只需提供位置信息给getView函数,然后getView函数根据位置信息向数据源获取对应的数据,根据数据返回不同的View。
-模板方法模式
定义:定义一个操作中的算法框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定的步骤。
这种模式也相当常见,比如我们的activity或者fragment,在base中定义了一些列的周期函数,基本把整个activity的框架全部定义好了,所以我们只需要进程基类的activity或者fragment方法,然后在定义好的周期函数中实现我们需要的内容就可以,而不用关心整个activity的启动所有过程。
-原型模式
用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式拷贝多个对象供调用者使用,即保护性拷贝