- 什么是设计模式
- 对问题处理方式的总结经验, 形成了一种代码设计的模式, 按这种模式不会再出问题, 所以叫做设计模式
- 所有的设计模式都源于面向对象的思想
- Java有23种设计模式
单例模式: 饿汉式- 单例:
- 单一实例, single instance, singleton, 目的是保证这个类只存在一个唯一的对象
- 为什么叫饿汉式:
- 因为类一加载, 对象就已经创建了, 像一个饿汉见到吃的马上就吃
3个要点
- 把构造方法私有化
- 在类中定义一个静态的本类对象, 并且要初始化
- 提供一个静态的方法getInstance(), 获取单例对象
单例模式: 懒汉式```java /* 单例: 线程不安全的懒汉式 *
解决懒汉式单例的线程安全问题解决线程安全问题的方式
- 在if判断null外加上synchronize同步代码块解决
- 这样产生了一个副作用: 如果已经创建了对象, 下一个线程调用就没必要再去synchronize外面等待锁了. 否则影响程序的执行速度
- 应该直接判断对象是否为空, 不为空就直接return对象. 所以在synchronize外再套一层判断null
简单工厂设计模式- 用于解决创建对象的问题
- 我们以前在创建对象时, 需要根据每个类的构造方法创建对象
``` 简单工厂, 用一个工厂类, 根据传入不同的参数, 生产不同的对象
工厂方法设计模式- 工厂方法思想: 将每个对象交给各自的工厂去创建
- 动物有自己的继承体系
- 工厂也有自己的集成体系
- 猫, 狗都有各自的工厂
- 与简单工厂区别
- 工厂抽象为接口, 有各自工厂实现类
- 使用工厂的多态创建工厂, 使用动物的多态调用动物的方法
- 有什么用?
- 以后可能会用到第三方SDK, 他们会实现某种逻辑(比如QQ登录), 腾讯把登录逻辑都写好了, 用多态的抽象类或接口对象去创建对象, 调用方法, 但具体实现每个公司都不一样, 所以搞成接口或抽象类, 你需要自己定义类继承或实现, 重写方法. 腾讯就能调用了, 从而实现QQ登录
``` 工厂方法, 创建工厂接口, 定义创建不同对象的子工厂, 按照各自创建对象的方式重写工厂接口的方法
+-----------------------+| interface Factory || || Animal createAnimal() |+-----------------------+ | | +----------------+ | | CatFactory |__ +------| ___cat___cat__cat__cat____ | | createAnimal() | | +----------------+ | | +----------------+ | | DogFactory |__ +------| ____dog_ dog__dog__dog____ | createAnimal() | +----------------+集团化大企业, 不同分厂生产不同的产品, 由总部统一管理 ```