设计模式原则
单一职责
开闭原则
里氏替换
接口隔离
依赖倒置(也称依赖反转)
迪米特原则(更好的扩展性)
创建型模式标识:●
行为性模式标识:※
1●单例模式:(instance)
确保一个类只有一个实例对象,自行实例化并想系统提供这个单例
注意点:Android中的单例模式传入context可能导致内存泄漏,建议传入getAppclctonContext
2●构建模式:(Builder)
通常配置类的构建器将配置和构建分离,同时也将配置从目标类中隔离出来,避免过多的setter方法,较常见的形式是通过调用链实现,这样代码更简介
注意点:
场景:第三方的框架ImageLoder的实现,Okhttp的封装,以及Android中alert等都涉及构建模式;
优点:
1。良好的封装性,不必知道那么多细节
2。建造者独立,容易扩展
缺点:会产生多余的Buider对象以及Director(android中的用法是把这个Director省略掉,通过返回this链式调用),消耗内存
3●原型模式:(Prototype model)
通过拷贝创建新的对象,涉及到深拷贝和浅拷贝;
注意点:
场景:
1.类初始化需要消耗非常多的资源
2.通过new产生一个对象需要非常繁琐的数据准备或访问权限
3.提供给其他调用者,其他调用者可能都需要修改对象属性的时候,通过拷贝提供给调用者,即保护性拷贝
优点:通过二进制流的拷贝,要比直接new一个对象性能好很多,特别是要在一个循环体内产生大量的对象时;
缺点:优点亦是缺点,直接拷贝是不会调用构造函数的。减少了约束(优点亦是)
4●工厂模式:(Factory)
定义一个用于创建对象的接口,让子类决定实例化哪哥对象
注意点:每次添加产品就要编写一个产品类并集成子抽象类或者实现产品接口
静态工厂:他是一个弱化的工厂模式版本也称为简单工厂模式
抽象工厂:一般提供工厂的抽象,可以衍生多工厂方法模式(顾名思义,多个工厂的实现)
多工厂模式:多个工厂的实现,一个工厂的情况下使用静态工厂
利用反射更简洁的实现工厂模式产品生产product p=Cliss.forName(clazz.getName()).newInstance(); return p;
5●策略模式:(Strategy)
定义了一系列的算法,并封装起来,而且使他们还可以相互替换
注意点:
场景:
1.针对统一类型多处理方式,仅仅是具体行为有差别时
2.需要安全地封装多种统一类型的操作时
3.出现同一个抽象类有多个子类,而又需要使用If-else 或者switch-case来选择子类
具体实现:相同行为抽象,实现不同的具体实现策略,运行时选择注入不同的实现
— 笔记未完待续
网友评论