前言
系列文章参考了《大话设计模式》和《Android源码设计模式》两本书
1.创建型
1.1 简单工厂
- 用一个单独的类创造实例
简单工厂类依赖与运算类,加减乘除继承与运算类
1.2 工厂方法
-
创建一个工厂类接口,让子类决定实现哪个
-
代码:
-
缺点: 每加一个产品,就需要加一个产品工厂的类
VS简单工厂
- 将类的实例延续到子类
- 符合开放-闭合原则
1.3 抽象工厂
-
抽象工厂指的是,提供一系列相关或相互依赖对象的接口,无需指定它们具体的类,即不同产品对于不同的具体工厂
-
客户端通过抽象接口操纵实例,低耦合,易更改类别
但不易增减类别,如数据中的链表 -
安卓中有如 Activity中的onCreate()方法
public class BaseActivity extends Activity{
protected void onCreate(Bundle saveInstance){
super.onCreate(saveInstance);
setViewContent(new LinearLayout(this));
}
}
1.4 单例模式
-
单例:一个类只有一个对象
-
实现方法:
私有构造方法
,通过静态方法
构造唯一实例
当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,
如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类
-
一个锁两个判断:
第一个 判断是否初始化
第二个 防止多线程进入
第三个 避免双线程都执行到锁位置,一个线程进入后创建实例完成后,第二线程依旧创建 -
代码
客户端代码
-
好处:
易于控制访问
只需资源初始化一次,提高性能 -
现实生活中的避免超生一样
懒汉
- 使用时再实例化
- 存在多线程安全访问问题
- 懒汉代码有如上双锁里的实例
饿汉
- 类一加载就实例化对象
- 导致提前占用资源
- 在安卓中的单例应用:创建ListView
public View getView(int position,View contentView,ViewGroup parent){
public View itemView;
if(contentView==null){
itemView=LayoutInflater.from(mContext).inflate(mLayoutId,null);
...
}else{...}
return itemView;
}
1.5 原型模式
- 创建对象种类,通过
拷贝创建新对象
- 代码
(将工作经历克隆出来)
- 特点:
初始化信息不变,隐藏对象创建 - 对于深复制clone和浅复制copy:
所有变量与原来对象相同
但 深复制将引用对象的变量指向复制后的新对象
1.6 建造者模式
- 与装饰者区别:建造过程要求稳定
- 将建造和表示分离,用户不需要知道具体的建造过程
Director构造Builder接口对象,具体Builder继承,产生具体产品 - 适用于 创建复杂对象,对象
内部构造顺序稳定,但内容有复杂变化
- 代码
- 安卓中的应用:AlertDialog
AlertDialog.Builder builder=new AlertDialog.Builder(context);
builer.setIncon(...);
...
最后
概述了创建型中的 简单工厂模式,工厂方法模式,抽象工厂模式,单例模式,原型模式,建造者模式的概念结构特点及应用,其中抽象工厂,建造者从强耦合到弱耦合入手,单例和原型从提高了代码效率,减少资源浪费入手,遵循依赖倒置,开放-关闭原则