设计模式-创建型模式

创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

1.工厂方法模式:(常用,需要掌握)

定义:定义了一个创建对象的抽象方法,由子类决定要实例化的类。工厂方法模式将对象的实例化推迟到子类。

本质:将对象的实例化封装在工厂类中,将对象的创建与使用分离。也就是说:是用工厂类的方法来代替 new 操作的。

工厂模式的优点

  1. 降低耦合度
    • 对象的创建与使用分离,使用者无需关心创建对象的细节,符合单一职责原则。当对象的创建过程很复杂时这个优点会更加突出。
  2. 使代码更简洁,易维护
    • 高质量的代码必须保证单个方法不要太长,因此要尽量将方法进行封装,易于维护。
  3. 工厂模式有如下几种写法:

    简单工厂模式、工厂方法模式、抽象工厂模式。

1.1 简单工厂模式

定义:定义了一个创建对象的类,由这个类来封装实例化对象的行为。

1.2 工厂方法模式

定义:定义了一个创建对象的抽象方法,由子类决定要实例化的类。工厂方法模式将对象的实例化推迟到子类。

1.3 抽象工厂模式

定义:定义了一个接口用于创建相关或有依赖关系的对象族,而无需明确指定具体类。

抽象工厂:用来生产其他工厂的工厂。

区分

简单工厂 : 用来生产同一等级结构中的任意产品。(不支持拓展增加产品)

工厂方法 :用来生产同一等级结构中的固定产品。(支持拓展增加产品)

抽象工厂 :用来生产不同产品族的全部产品。

示例: BitmapFactory,ExecutorCallAdapterFactory,

3 单例模式(常用,需要掌握)

定义:确保一个类最多只有一个实例,并提供一个全局访问点

单例模式可以分为两种:预加载和懒加载

常见5种实现方式方式:懒汉式,饿汉式,静态内部类,双重校验锁,枚举

1)懒汉模式就是,它很懒,直到用到的时候才会去创建对象,而不是一开始就创建对象。

2)饿汉模式就是,它很饿,想快点创建对象,此模式在类加载时就立即创建对象。

3)静态内部类的单例写法是:在类内部有一个静态内部类,它持有外部类的实例。

4)双重校验锁:volatile作用:保证有序性、可见性。

第一次校验:也就是第一个if(singleton == null)

由于单例模式只要一次创建实例即可

第二次校验:也就是第二个if(singleton == null)

多线程场景下这个校验是防止二次创建实例

5)枚举

支持多线程

可保证只有一个实例。这与枚举类的实现有关。

支持防止反序列化和防止反射破坏单例

4.建造者模式(常用,需要掌握)

含义:将一个对象的构建过程与这个对象分离,使得可以很方便的用构建过程创建不同属性的对象。

定义:封装一个复杂对象构造过程,并允许按步骤构造。

定义解释: 我们可以将建造者模式理解为,假设我们有一个对象需要建立,这个对象是由多个组件(Component)组合而成,每个组件的建立都比较复杂,但运用组件来建立所需的对象非常简单,所以我们就可以将构建复杂组件的步骤与运用组件构建对象分离,使用builder模式可以建立。

安卓源码常见:Dialogue的Builder创建方式,Retrofit的Builder创建方式

5 原型模式(不常用,了解即可)

定义:通过复制现有实例来创建新的实例,无需知道相应类的信息。

简单地理解,其实就是当需要创建一个指定的对象时,我们刚好有一个这样的对象,但是又不能直接使用,我会clone一个一毛一样的新对象来使用;基本上这就是原型模式。关键字:Clone。

5.1 深拷贝和浅拷贝

浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。

深复制:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。clone明显是深复制,clone出来的对象是是不能去影响原型对象的

适用场景:创建对象非常耗费资源,适用clone方式实现复制对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chenhuakang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值