声明:本文是根据 “尚硅谷学院学习设计模式” 整理所得笔记,供自己复习所用
一、设计模式的目的
1.代码的重用性
相同功能的代码,不用多次编写
2.可读性
编程规范性,便于其他程序员的阅读和理解
3.可扩展性
当需要增加新的功能时,非常的方便,称为可维护)
4.可靠性
当我们增加新的功能后,对原来的功能没有影响)
5.使程序呈现高内聚,低耦合的特性则
二、七大原则
1.单一职责:
即一个类应该只负责一项职责
2.接口隔离:
客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上
3.依赖倒转
依赖倒转(倒置)的中心思想是面向接口编程
4.里式替换原则
所有引用基类的地方必须能透明的使用其子类对象
5.开闭原则
增加新的功能时,尽量增加,而不是修改
6.迪米特法则
最少知道原则
7.合成复用原则
尽量使用合成/聚合,而不是使用继承
三、三大类型
-
创建型模式:
单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式
-
结构型模式:
适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式
-
行为型模式:
模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter 模式)、状态模式、策略模式、职责链模式(责任链模式)
三、UML类图
1、UML 基本介绍
1、Unified modeling language UML (统一建模语言),用于描述系统中的类(对象)本身的组成和类(对象)之间的各种静态关系。
2、类之间的关系
依赖、泛化(继承)、实现、关联、聚合与组合。
依赖:
- 类中用到了对方
- 如果是类的成员属性
- 如果是方法的返回类型
- 是方法接收的参数类型
- 方法中使用到
泛化:
- 泛化关系实际上就是继承关系
- 如果 A 类继承了 B 类,我们就说 A 和 B 存在泛化关系
实现:
- 实现关系实际上就是 A 类实现 B
关联: - 实际上就是类与类之间的联系,它是依赖的特例
- 单向一对一、双向一对一
聚合:
- 是整体和部分的关系,整体与部分可以分开。
组合:
- 也是整体与部分的关系,但是整体与部分不可以分开
网课截图
四、设计模式
1.单例设计模式
单例模式有八种方式:
- 饿汉式(静态常量)
- 饿汉式(静态代码块)
- 懒汉式(线程不安全)
- 懒汉式(线程安全,同步方法)
- 懒汉式(线程安全,同步代码块)
- 双重检查
- 静态内部类
- 枚举
饿汉式(静态变量):
步骤:
- 构造器私有化 (防止 new )
- 类的内部创建对象
- 向外暴露一个静态的公共方法。getInstance
class Singleton {
//1. 构造器私有化, 外部不能 new
private Singleton() {
//2.本类内部创建对象实例
private final static Singleton instance = new Singleton();
//3. 提供一个公有的静态方法,返回实例对象
public static Singleton getInstance() {
return instance;
}
}
优缺点说明:
- 优点:这种写法比较简单,就是在类装载的时候就完成实例化。避免了线程同步问题。
- 缺点:
- 在类装载的时候就完成实例化,没有达到 Lazy Loading 的效果。如果从始至终从未使用过这个实例,则 会造成内存的浪费
- 这种方式基于 classloder 机制避免了多线程的同步问题,不过,instance 在类装载时就实例化,在单例模式中大多数都是调用getInstance 方法,但是导致类装载的原因有很多种,因此不能确定有其他的方式(或者其他的静 态方法)导致类装载,这时候初始化instance 就没有达到 lazy loading 的效果
- 结论:这种单例模式可用,可能造成内存浪费
饿汉式(静态代码块)