1、开闭原则
对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码
2、里氏代换原则
所有引用父类的地方必须能透明地使用其子类的对象
3、依赖倒转原则
这个原则是开闭原则的基础,具体指针对接口编程,依赖于抽象而不依赖于具体
4、接口隔离原则
使用多个隔离的接口,比使用单个接口要好。降低类之间的耦合度
5、迪米特法则(最少知道原则)
一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立
6、合成复用原则
尽量使用合成/聚合的方式,而不是使用继承
1、概念
单例模式是一种对象创建模式,它用于产生一个对象的具体实例,它可以确保系统中的一个类只产生一个实例
2、好处
3、六种写法
public class HungurySingleton {
private static final HungurySingleton mHungurySingleton = new HungurySingleton();
private HungurySingleton(){
}
public static HungurySingleton getHungurySingleton() {
return mHungurySingleton;
}
}
不足:无法对instance实例做延时加载
优化:懒汉模式
public class LazySingleton {
private static LazySingleton instance;
private LazySingleton() {
}
public static LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}
不足:在多线程并发时无法保证实例唯一
优化:懒汉线程安全
public class LazySafetySingleton {
private static LazySafetySingleton instance;
private LazySafetySingleton (){
}
//方式一
public static synchronized LazySafetySingleton getInstance() {
if (instance == null) {
instance = new LazySafetySingleton();
}
return instance;
}
//方式二
public static LazySafetySingleton getInstance1() {
synchronized (LazySafetySingleton.class) {
if(instance == null){
instance = new LazySafetySingleton();
}
}
return instance;
}
}
不足:性能较低
优化:DCL
public class DclSingleton {
private static volatile DclSingleton mInstance = null;
private DclSingleton() {
}
public static DclSingleton getInstance() {
if (mInstance == null) {
synchronized (DclSingleton.class) {
if (mInstance == null) {
mInstance = new DclSingleton();
}
}
}
return mInstance;
}
}
不足:JVM的即时编译器中存在指令重排序的优化
解决:将实例设置为Volatile
优化:静态内部类/枚举
public class StaticInnerSingleton {
private StaticInnerSingleton() {
}
public static StaticInnerSingleton getInstance() {
return SingletonHolder.sInstance;
}
private static class SingletonHolder {
private static final StaticInnerSingleton sInstance = new StaticInnerSingleton();
}
}
优点:
静态内部类是私有的,除了外部类其他是无法访问的
枚举
public enum EnumSingleton {
INSTANCE;
public void doSomeThing() {
}
}
优点:
4、Android中的单例
application、eventBus
1、概念
建造者模式是较为复杂的创建型模式,它将客户端与包含多个组成部分的复杂对象的创建过程分离
2、使用场景
当构造一个对象需要很多参数的时候,并且参数的个数或者类型不固定的时候
3、UML图分析
4、在Android中应用
AlertDialog、Glide、OkHttp
1、概念
将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名又称包装类
2、分类
3、类适配器定义
类的适配器模式把适配的类的API转换成为目标类的API
4、类适配器UML图分析
5、对象适配器定义
与类的适配器模式一样,对象的适配器模式把被适配的类的API转换成为目标类的API,与类的适配器模式不同的是,对象的适配器模式不是使用继承关系连接到Adaptee类,而是使用委派关系连接到Adaptee类
6、对象适配器UML图分析
7、在Android中应用
BaseAdapter类
1、概念
动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活
2、使用场景
3、UML图分析
4、优点
5、在Android中应用
context类
1、概念
外观模式的主要目的在于让外部减少与子系统内部多个模块的交互,从而让外部能够更简单得使用子系统,它负责把客户端的请求转发给子系统内部的各个的模块进行处理
2、使用场景
3、UML图分析
4、优点
5、在Android中应用
contextImpl类
1、概念
将对象以树形结构组织起来,以达到“部分-整体”的层次结构,使得客户端对单个对象和组合对象的使用具有一致性
2、使用场景
3、UML图分析
UML图的Composite理解成Container容器更为合适,Container容器会包含有多个Component组件
4、优点
5、在Android中应用
View、ViewGroup
1、概念
定义一系列的算法,把它们一个个封装起来,并且使他们可互相替换,本模式使得算法可独立于使用它的客户而变化
2、使用场景
一个类定义了多种行为,并且这些行为在这个类的方法中以多个条件语句的形式出现,那么可以使用策略模式避免在类中使用大量的条件语句
3、UML图分析
4、优点
5、在Android中应用
Volley、属性动画、插值器
1、概念
模板方法是通过定义一个算法骨架,而将算法中的步骤延迟到子类,这样子类就可以复写这些步骤的实现来实现特定的算法
2、使用场景
3、UML图分析
4、在Android中应用
Activity和Fragment生命周期、AsyncTask、BaseActivity
1、概念
定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新
2、使用场景
3、UML图分析
4、在Android中应用
ListView、RxJava
1、概念
是一个请求有多个对象来处理,这些对象是一条链,但具体由哪个对象来处理,根据条件判断来确定,如果不能处理会传递给该链中的下一个对象,直到有对象处理它为止
2、使用场景
3、UML图分析
4、在Android中应用
try-catch语句、有序广播、事件分发机制
1、概念
给目标对象提供一个代理对象,并由代理对象控制目标对象的引用
2、使用场景
3、UML图分析
4、在Android中应用
ActivityManagerProxy、ActivityManagerNatvie