android设计模式初探

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wgj99991111/article/details/52430248

最近学习android设计模式,现将一些重点记录下来。
设计模式是编程过程中的思想,能够帮助我们解决很多软件开发过程中的很多问题,更重要的是可以使你设计的软件结构清晰、拓展性更强。
设计模式的根本原则是:抽象、单一职责和最小化
六大原则:
(一)单一职责原则:
两个完全不一样的功能不应该放在同一个类里。
(二)开闭原则:
对于拓展是开放的,对于修改是封闭的,一般可以通过抽象来实现。(接口和抽象类)
(三)里氏替换原则:
所有引用基类的地方必须能够透明的使用其子类的对象
(四)依赖倒置原则:
模块之间的依赖关系是通过接口或抽象类产生的。
(五)接口隔离原则:
应该把庞大、臃肿的接口拆分为更小更具体的接口。
(六)迪米特原则:
一个类应该对自己调用或需要耦合的类知道的最少。
二十三种设计模式:
一、单例模式
用于确保某个类有且只有一个对象的场景。最好是使用静态内部类单例模式。
二、Builder模式
将一个复杂对象的构建过程和该对象的表示分离开来,常用于一个复杂对象可以有多重不同的组装方法,不同的组装可以产生不同的对象表示。如AlertDialog的创建。在类中有一个内部类,该内部类有一些set方法和一个create方法。
三、原形模式
当一个对象在创建过程中使用资源比较多时,采用克隆的方法复制一个已经存在的对象,可用于对对象状态的保存与备份。用类实现cloneable接口就可实现原型模式。他与备忘录模式的主要区别在于,原型模式用于新对象的创建,而备忘录不会创建新对象。
四、工厂方法模式
用于构建大类型相同,但具体有差异的一类对象,可以把这类对象的构建统一起来,用户使用时,只要给工厂输入不同的参数就可以构建所需要的对象。可以使用反射类实现工厂方法,比如对于存在多种不同方式进行本地数据持久化的情况就可以使用工厂方法。
工厂方法与builder方法的区别在于builder处理的是对象的构建过程比较复杂,比如要根据不同的需要设置不同的参数,但构建后对象的行为是不变的。而工厂方法则是处理一大类相似对象的构建问题,构建后不同的具体对象有不同的行为。
五、抽象工厂模式
创建一个对象族,这个对象族有相同的约束。工厂方法是用一个工厂创建不同的产品,而抽象工厂是用不同的工厂来创建不同的产品。
与工厂方法模式相似,其区别在于所建立的工程类是抽象的还是具体的,如果工厂类是抽象的,则是抽象工厂模式。
六、策略模式
一个问题有多种不同的解决方案(或处理方法),需要根据用户的需要在某个具体的问题中选择一种解决方法。在相同的行为抽象下有不同的具体实现策略。比如用户在加载图片时可以有不同的加载策略的情况。
七、状态模式
同一个对象当其内部状态发生改变时要求其行为也随之改变。比如在系统的登录状态和非登录状态通常要求对于用户的操作有不同的响应。实现中可以定义一个状态接口和一个状态控制类,然后不同的状态都实现接口,对于接口中的函数进行自己的实现。
八、责任链模式
用于多个不同的对象都可以处理同一个请求,但具体由谁来处理,则由运行时的状态来决定。例如使用责任链模式可以实现有序广播。
九、解释器模式
用于对xml等文件的解析,对某种语法规则下的语句的解释,如数字表达式的解释。
十、命令模式
将行为的调用者与实现者解耦,用于行为实现较为复杂,且需要对行为的实现过程进行日志记录或者撤销等行为的情况。
十一、观察者模式
应用于多个对象之间存在相互依赖关系的情况,其中的一个对象状态的变化会引起其他对象行为或状态的变化。可以使用JDK中的observer,observable接口方便实现。listView的viewAdapter就是观察者模式的典型例子。
但是目前当多个部件之间存在相互联系时,可以使用EventBus来实现部件之间的相互关联,十分方便。
十二、备忘录模式
用于保存对象当前的状态,并在之后可以恢复到这些状态。比如游戏的存盘和读盘操作就是备忘录模式的很好的例子。
十三、迭代器模式
给用户提供一个方便的方法去遍历容器中的每一个对象。也就是在容器和用户之间插入一个第三者。现在的List的子类都包含了迭代器。
十四、模板方法模式
定义一个操作中算法的框架,而将一些具体的步骤的实现延迟到子类中,使得子类可以不改变算法的结构,即可重新定义该算法的某些具体的步骤。使用Asynctask编程时,doInBackground和onPreExecute等方法的具体实现就模板方法的很好的例子。在实现中,可以使用抽象类中定义方法,然后在具体实现类中实现的方法进行。
十五、访问者模式
将数据操作与数据结构分离。适用于数据结构相对稳定,数据操作经常变化的数据操作类应用。
十六、中介者模式
用于协调多个对象之间的交互,将多对象之间多对多的关系变为中介者与多个对象之间一对多的关系。如用电脑的主板来协调CPU、内存等多个设备之间的关系。在一般编程中,界面上有不同的显示元素,此时Activity就充当了中介者这个角色来协调各个显示元素之间的关系。
十七、代理模式
为其他对象提供一种代理,以控制对这个对象的访问。真实对象将方法的执行委托给代理对象。android中的AIDL就是一种代理模式。在编程过程中远程数据访问时,列表仅仅需要概要信息,当用户点击列表中的某一条时才显示该条的详细信息,这就是典型的远程代理模式应用场景。
十八、组合模式
这是一种结构型模式,告诉你一种组织对象的方式。即,一组相似的对象,能够形成部分与整体的层次结构,将其作为一个对象来处理。用树状的结构来组合这些对象,并提供统一的访问接口。如View和ViewGroup/操作系统中的文件系统都是使用的组合模式。
十九、适配器模式
用于不兼容类型的转换。listView中的adapter就是对数据库数据与页面显示数据实现一个转换,其就是适配器模式的一个例子。
二十、装饰模式
用于需要动态透明地拓展类的功能的情况。
二十一、享元模式
用于对大量相似对象的访问,其采用构建缓冲池的方式,减少了内存中相似对象的属相,提高了性能。就是把已经创建的对象缓存起来,用户下次请求相似对象时,直接给用户,而不是重建这个对象。
二十二、外观模式
多个复杂的子系统形成一个大系统,大系统对外提供统一简单接口,系统内部的变化不会影响用户对该大系统的使用。
二十三、桥接模式
一个类存在两个独立变化的维度,或者任何多维度变化的类,且在这些变化的维度上都需要进行拓展时,适用于该模式。比如冲咖啡就包涵大杯还是小杯,以及加糖不加糖这两个不同的维度,就可以使用桥接模式。实际编程中,系统提供的操作相机的Camera、播放视频的MediaPlayer等都是桥接模式,这些API类为我们操作底层硬件提供了可能。
这个类就是我们要控制的其中一个维度,另一个维度在另一个类里实现,并在这个类中保存另一个维度的引用,以此来实现桥接模式。
二十四、MVP架构模式
使用P来连接M和V,减少了M与V的耦合。

猜你喜欢

转载自blog.csdn.net/wgj99991111/article/details/52430248
今日推荐